본 문서에서는 테스트 실행 중 "strict mode violation" 에러가 발생한 경우의 원인과 해결 절차에 대해 설명합니다.
개요
Autify Nexus에서 테스트를 실행할 때, 스텝이 실패하고 에러 상세 정보에 다음과 같은 메시지가 표시될 수 있습니다.
strict mode violation: getByText('요소 이름', { exact: true }) resolved to 2 elements원인
이 에러는 조작 대상으로 지정한 로케이터(요소를 찾기 위한 조건)가 화면 상의 여러 요소와 일치했음을 의미합니다.의도하지 않은 요소에 대한 오작동을 방지하기 위한 사양(strict mode)에 따라, 하나의 요소로 특정할 수 없는 경우에는 에러로 처리됩니다.
주요 발생 조건
화면 내에 동일한 텍스트를 가진 요소가 여러 개 존재하는 경우 (예: 표의 제목과 행 데이터, 동일한 이름의 메뉴 항목 등)
이전 테스트 실행이 중간에 실패하여, 생성된 데이터가 삭제되지 않고 화면에 남아 있는 경우
해결 절차
에러를 해결하려면 다음 방법 중 하나로 대응하십시오.
해결 방법 1: 테스트 환경의 데이터 정리하기
이전 테스트에서 생성된 데이터가 남아 있는 것이 원인인 경우 환경을 정리하십시오.
테스트 대상 화면을 열고, 대상 데이터가 중복으로 표시되어 있지 않은지 육안으로 확인하십시오.
중복된 경우, 수동으로 데이터를 삭제한 후 테스트를 다시 실행하십시오.
향후 대책으로 시나리오의 시작 부분에 "대상 데이터가 남아 있으면 삭제한다"는 전처리 스텝을 추가하는 것을 권장합니다.
해결 방법 2: 더 고유한 로케이터로 변경하기 (일반 스텝의 경우)
동일한 텍스트를 가진 요소가 여러 개 존재할 수 있는 화면에서는 텍스트에만 의존하지 않는 고유한 로케이터로 변경하십시오.
시나리오 편집 화면에서 에러가 발생한 대상 스텝을 여십시오.
고급 설정을 열고 로케이터 변경을 클릭하십시오.
로케이터 필드에 새로운 로케이터를 입력하십시오.
완료를 클릭하여 저장하십시오.
해결 방법 3: 코드 측에서 고유하게 만들기 ("Playwright 코드" 스텝의 경우)
getByText나 getByRole 등이 여러 개 일치할 가능성이 있는 경우, 코드를 수정하여 요소를 1개로 특정하십시오.
부모 요소나 컨테이너로 필터링합니다.
filter({ hasText: '...' })를 사용하여 필터링합니다.getByTestId등의 안정적인 속성을 활용합니다.
해결되지 않는 경우
위의 절차를 시도해도 에러가 해결되지 않는다면 고객 지원팀에 문의해 주십시오.