요소 존재 여부 및 waitFor 명령 확인 Selenium

⚡ 스마트 요약

요소가 존재하는지 확인하고 waitFor 명령을 실행합니다. Selenium IDE는 페이지에 테스트에서 예상하는 요소와 텍스트가 포함되어 있는지 확인하고, 다음 단계가 실행되기 전에 동적 조건이 충족될 때까지 재생을 일시 중지합니다.

  • 🔘 요소 검사: verifyElementPresent는 로케이터가 페이지의 요소와 일치하면 TRUE를 반환하고, verifyElementNotPresent는 그 반대입니다.
  • ☑️ 텍스트 검사: verifyTextPresent는 페이지 전체를 검색하며 대소문자를 구분하므로 "Atlanta"는 "atlanta"와 절대 일치하지 않습니다.
  • 위치 확인: verifyElementPositionLeft와 verifyElementPositionTop은 요소의 페이지 가장자리로부터의 픽셀 오프셋을 비교합니다.
  • 🧪 페이지 로드: clickAndWait와 같은 andWait 명령은 새 페이지 로딩이 완료될 때까지 스크립트 실행을 일시 중지합니다.
  • 🛠️ 동적 콘텐츠: waitFor 명령어는 페이지 로드 대신 특정 조건이 충족될 때까지 기다리므로, 페이지를 다시 로드하지 않는 AJAX 화면에 적합합니다.
  • 📊 현재 사용 중인 IDE: 브라우저 확장 프로그램은 이러한 단계의 이름을 변경하고 각 대기 명령에 밀리초 단위의 시간 제한을 설정합니다.

요소가 존재하는지 확인하고 waitFor 명령을 실행합니다. Selenium IDE

녹음된 Selenium IDE 스크립트는 클릭과 입력을 수행하지만, 애플리케이션이 올바르게 작동했는지 여부를 스스로 판단하지는 않습니다. 두 가지 명령 제품군이 이 작업을 수행합니다. 확인 페이지 상태를 확인하는 명령과 기다리다 페이지 검사 준비가 완료될 때까지 실행을 보류하는 명령입니다.

⚠️ 버전 관련 유의사항: 아래 스크린샷은 원본에서 가져온 것입니다. Firefox-플러그인 Selenium 더 이상 배포되지 않는 IDE이며, 그들은 카멜케이스 형식의 셀레네어 이름을 사용합니다. 현재 사용되는 IDE는 크롬입니다. Firefox 그리고 엣지 브라우저 확장여기에 설명된 동작은 여전히 ​​적용되지만, 몇몇 명령어 이름이 변경되었습니다. 예를 들어 맵(map)이 그렇습니다.ping 표는 이 문서 뒷부분에 나와 있으며, 모든 원래 명령과 스크린샷은 게시된 그대로 보존되어 있습니다.

요소 존재 확인

다음 두 명령을 사용하여 요소의 존재 여부를 확인할 수 있습니다.

  • verifyElementPresent – 지정된 요소가 페이지에서 발견되면 TRUE를 반환합니다. 그렇지 않으면 FALSE를 반환합니다.
  • verifyElementNotPresent – 지정된 요소가 페이지의 어느 곳에서도 발견되지 않으면 TRUE를 반환합니다. 존재하는 경우 FALSE입니다.

두 명령어 모두 요소를 인수로 받습니다. 토지 경계 설정자 인간을 Target 필드 — ID, 이름, CSS 선택자, 링크 텍스트 또는 xpath 표현이며, 둘 다 값이 필요하지 않습니다.

아래 테스트 스크립트는 UserName 텍스트 상자가 존재하는지 확인합니다. Mercury 투어 홈페이지에는 이름 텍스트 상자가 없습니다. 이름 텍스트 상자는 실제로 등록 페이지에 있는 요소입니다. Mercury 투어는 홈페이지에 없습니다.

Selenium IDE 스크립트에서 userName 입력란에 대해 verifyElementPresent를, First Name 입력란에 대해 verifyElementNotPresent를 사용합니다.

왜냐하면 이것들은 확인 명령이 아니라 단언하다 명령 실행 시 오류가 발생하면 로그에 기록되고 나머지 단계는 계속 실행됩니다. 이러한 차이점은 아래에서 자세히 설명합니다.

명령에 특정 텍스트가 있는지 확인 Selenium

요소가 존재하는지 확인하는 것만으로는 항상 충분하지 않습니다. 테스트에서는 종종 사용자에게 표시되는 단어를 확인해야 합니다. 두 가지 텍스트 명령이 이러한 경우를 처리합니다.

  • verifyTextPresent – 지정된 텍스트 문자열이 페이지 어딘가에 발견되면 TRUE를 반환합니다. 그렇지 않으면 FALSE를 반환합니다.
  • verifyTextNotPresent – 지정된 텍스트 문자열이 페이지 어디에서도 발견되지 않으면 TRUE를 반환합니다. 발견된 경우 FALSE

이러한 명령은 대소문자를 구분한다는 점을 기억하십시오.

아래 로그는 동일한 페이지를 두 번 확인했으며, 이때 사용된 문구의 철자가 서로 다릅니다.

Selenium IDE 로그에 따르면 애틀랜타에서 라스베가스로 가는 경우 verifyTextPresent가 통과하고, 애틀랜타에서 라스베가스로 가는 경우 실패하는 것으로 나타납니다.

위 시나리오에서 "Atlanta to Las Vegas"와 "atlanta to Las Vegas"는 서로 다르게 처리되었습니다. 첫 번째 문장에서는 "Atlanta"의 "A"가 대문자였고, 두 번째 문장에서는 소문자였기 때문입니다. verifyTextPresent 명령을 각각에 적용했을 때, 하나는 통과했고 다른 하나는 실패했습니다.

요소의 특정 위치 확인

레이아웃 결함으로 인해 위치 탐지기가 제대로 작동하지 않는 경우는 드물기 때문에 존재 여부 확인에서 이를 놓치는 경우가 있습니다. 위치 명령을 사용하면 이러한 문제를 해결할 수 있습니다.

Selenium IDE는 요소가 브라우저 창의 왼쪽 또는 위쪽 가장자리로부터 얼마나 떨어져 있는지(픽셀 단위) 측정하여 요소의 위치를 ​​나타냅니다.

  • verifyElementPositionLeft – 지정된 픽셀 수가 페이지 왼쪽 가장자리에서 요소까지의 거리와 일치하는지 확인합니다. 지정된 값이 왼쪽 가장자리로부터의 거리와 일치하지 않으면 FALSE를 반환합니다.
  • 요소위치위쪽확인 – 지정된 픽셀 수가 페이지 상단 가장자리에서 요소까지의 거리와 일치하는지 확인합니다. 지정된 값이 위쪽 가장자리로부터의 거리와 일치하지 않으면 FALSE를 반환합니다.

아래 스크립트는 예상 픽셀 오프셋을 값 열에 기록합니다.

Selenium IDE에서 verifyElementPositionLeft 및 verifyElementPositionTop 함수를 사용하여 Value 열에 픽셀 값을 입력하는 단계입니다.

이 두 명령은 주의해서 다루어야 합니다. 픽셀 오프셋은 창 크기, 확대/축소 수준 및 설치된 글꼴에 따라 달라지므로, 한 컴퓨터에서는 정상적으로 작동하는 하드코딩된 값이 다른 컴퓨터에서는 오류가 발생할 수 있습니다.

대기 명령 Selenium

verify 명령은 화면에 이미 표시된 내용만 검사할 수 있으므로, 너무 일찍 실행되는 검사는 애플리케이션이 정상적으로 작동하더라도 실패합니다. wait 명령은 이러한 타이밍 문제를 해결합니다.

다음은 대기 명령의 유형입니다. Selenium

andWait 명령

이는 다음 명령으로 이동하기 전에 새 페이지가 로드될 때까지 기다리는 명령입니다.

예로는

  • 클릭하고 기다리세요
  • 입력하고 기다리세요
  • 선택하고 기다려

아래 기록된 단계에서 볼 수 있듯이, 이들 모두는 AndWait 접미사가 붙은 일반적인 액션 명령입니다.

녹화된 clickAndWait 단계가 유지됩니다. Selenium 다음 페이지 로딩이 완료될 때까지 IDE 스크립트가 실행됩니다.

waitFor 명령

이는 새 페이지 로드와 관계없이 다음 명령으로 진행하기 전에 지정된 조건이 true가 될 때까지 기다리는 명령입니다. 이러한 명령은 전체 페이지를 다시 로드하지 않고 값과 요소를 변경하는 AJAX 기반 동적 웹사이트에 사용하기에 더 적합합니다. 예는 다음과 같습니다:

  • 제목을 기다려
  • waitForTextPresent
  • 경고 대기

아래의 페이스북 시나리오를 생각해 보세요.

페이스북 가입 양식에서 "생년월일을 입력해야 하는 이유는 무엇인가요?"라는 질문이 표시되고, 해당 링크를 클릭하기 전에 "생년월일을 입력해야 하는 이유는 무엇인가요?"라는 메시지가 나타납니다.

“click”과 “waitForTextPresent”의 조합을 사용하여 “Providing your birthday”라는 텍스트가 있는지 확인할 수 있습니다.

Selenium IDE 단계에서 클릭 후 waitForTextPresent를 사용하여 생일 문자 입력을 기다립니다.

“내 생일을 왜 제공해야 하나요?”를 클릭해도 페이지가 로드되지 않았기 때문에 clickAndWait를 사용할 수 없습니다. 링크. 그렇게 하면 테스트가 실패합니다.

스크립트를 통해 삽입된 콘텐츠에도 동일한 규칙이 적용되며, 내비게이션을 통한 삽입에도 마찬가지입니다. AJAX 기반 화면 거의 항상 andWait보다는 waitFor가 필요합니다.

Assert, Verify, waitFor 명령어 비교 Selenium IDE

초보자들은 흔히 잘못된 제품군을 선택하고는 왜 첫 번째 결함에서 검사가 중단되는지, 혹은 왜 모든 결함이 20개나 되는 오류를 보고하는지 의아해합니다. trac다시 하나로 돌아가자. 세 개의 접두사는 각각 다른 세 가지 질문에 답한다.

접두사 그것이하는 일 실패 시 최고의 용도
단언하다 상태를 즉시 확인합니다. 실패를 기록하고 테스트 케이스를 중지합니다. 전제 조건 — 다른 모든 작업이 의미를 갖기 전에 반드시 성공해야 하는 로그인 절차
확인 상태를 즉시 확인합니다. 오류를 기록하고 다음 명령으로 넘어갑니다. 하나의 확인 페이지에 여러 개의 라벨이 있는 것과 같은 독립적인 확인 절차
기다려주세요 조건이 충족될 때까지 여론조사를 실시합니다. 타임아웃이 만료되면 오류를 기록한 후 계속 진행합니다. AJAX 응답, 스피너, 대화 상자 등 늦게 나타나는 모든 것

실용적인 패턴은 이 세 가지를 모두 결합합니다. 먼저 현재 방문한 페이지를 검증하고, 비동기적으로 도착하는 요소를 기다린 다음, 각 필드를 개별적으로 검증합니다. 이 순서대로 진행하면 잘못된 탐색이 하나라도 발생하면 테스트가 조기에 종료되고, 몇 가지 사소한 불일치는 한 번의 실행으로 모두 보고됩니다. 이러한 원칙은 다른 부분에도 적용됩니다. Selenium 코드로 작성된 테스트로, 각각에 해당하는 것이 하드 어설션, 소프트 어설션, 명시적 대기입니다.

현재 명령의 확인 및 대기 Selenium IDE

The Firefox위의 스크린샷을 생성했던 플러그인 IDE는 더 이상 사용되지 않으며, 명령어 세트는 현재 브라우저 확장 프로그램에 맞춰 재구축되었습니다. 몇몇 셀레네어 이름은 그대로 유지되었고, 일부는 이름이 변경되었으며, 몇몇은 삭제되었습니다. 아래 표는 이 문서에서 사용된 명령어를 공식 웹사이트에서 가져온 현재의 해당 명령어와 비교한 것입니다. Selenium IDE 명령어 참조.

레거시 셀레네세 명령 현재 IDE의 명령
verifyElementPresent 요소가 존재하는지 확인합니다
verifyElementNotPresent 검증 요소가 존재하지 않습니다
verifyTextPresent 텍스트 검증 (페이지 전체가 아닌 요소 로케이터에 한정)
verifyTextNotPresent 텍스트가 아닌지 확인합니다(요소 로케이터로 범위 지정).
제목 확인 제목을 확인하세요
verifyElementPositionLeft / verifyElementPositionTop 동등한 항목 없음 — 입장 주장이 삭제되었습니다
clickAndWait, typeAndWait, selectAndWait AndWait 접미사가 없습니다. open 명령은 이미 페이지 로드를 기다립니다.
waitForElementPresent 요소가 나타날 때까지 기다립니다. 대기 시간은 밀리초 단위입니다.
경고 대기 대화 상자가 나타난 후 경고 메시지를 확인하거나 경고 텍스트를 검증하십시오.

일상적인 작업에서 가장 중요한 두 가지 차이점이 있습니다. 첫째, 현재 대기 명령(요소 존재 대기, 요소 표시 대기, 요소 편집 가능 대기 및 그 반대 명령)은 각각 밀리초 단위의 명시적인 대기 시간을 가지므로, 더 이상 느린 단계가 하나의 전역 타임아웃을 공유할 필요가 없습니다. 둘째, 페이지 전체 텍스트 검색 기능이 사라졌습니다. 이제 텍스트 확인에는 로케이터가 필요하며, 이는 일반적으로 더 정확한 검사를 제공합니다.

Verify 및 waitFor 명령 사용 시 흔히 발생하는 오류

이러한 명령과 관련된 대부분의 문제는 IDE의 결함이 아닙니다. 아래 목록은 가장 자주 발생하는 오류와 각 오류를 해결하는 방법을 설명합니다.

  • 해당 요소는 존재하지만 검사가 여전히 실패합니다. 존재 여부와 가시성은 서로 다른 상태입니다. CSS 규칙 뒤에 숨겨진 요소도 DOM에는 여전히 존재하므로, 테스트가 사용자가 실제로 해당 요소를 보는 것에 의존하는 경우 존재 여부 확인과 요소가 가시화될 때까지 기다리는 조건을 함께 사용해야 합니다.
  • 텍스트 검사는 표현이 동일한 경우 오류를 발생시킵니다. 디자인 문서에서 복사한 줄 바꿈 방지 공백, 후행 공백 및 중괄호는 모두 정확한 일치를 깨뜨립니다. 붙여넣기 대신 예상 문자열을 직접 다시 입력하십시오.
  • 페이지가 분명히 로드되었는데도 대기 명령 시간이 초과되었습니다. 해당 요소는 일반적으로 iframe 내부에 있습니다. 먼저 `select frame`을 실행해야 합니다. 그렇지 않으면 로케이터가 잘못된 문서에 대해 평가됩니다.
  • clickAndWait 함수가 단일 페이지 애플리케이션에서 멈춥니다. 탐색이 이루어지지 않으므로 기다릴 필요가 없습니다. 클릭 후 적절한 waitFor 명령으로 대체하십시오.
  • 로컬 환경에서는 위치 확인이 통과되지만 빌드 서버에서는 실패합니다. 화면 크기와 글꼴 렌더링 방식은 다릅니다. 존재 여부 또는 텍스트 확인을 선호하거나 테스트 시작 시 창 크기를 명시적으로 설정하십시오.
  • 전체 과정이 첫 번째 불일치에서 중단됩니다. verify 명령을 입력해야 할 자리에 assert 명령이 기록되었습니다. 접두사를 바꾸면 첫 번째 실패뿐만 아니라 모든 실패를 보고합니다.

스크립트가 이러한 함정을 극복하고 나면, 다음 단계는 대개 다음과 같습니다. 런타임 값을 변수에 저장합니다. 따라서 검사는 하드코딩된 문자열이 아닌 실제 데이터와 비교합니다.

자주 묻는 질문

기존 IDE는 모든 waitFor 단계에서 하나의 전역 타임아웃을 공유했는데, setTimeout 명령으로 이를 변경했습니다. 현재 확장 기능은 각 wait 명령에 밀리초 단위의 명시적인 대기 시간을 지정하므로, 특정 화면 하나가 느리다고 해서 다른 모든 단계가 같은 시간 동안 대기해야 하는 문제가 더 이상 발생하지 않습니다.

아니요. 일시 정지(Pause)는 항상 전체 시간 동안 대기하므로 페이지 로딩 속도가 빠를 때도 시간을 낭비하고 페이지 로딩 속도가 느릴 때도 제대로 작동하지 않습니다. 데모 중에 특정 단계를 보여줄 때만 사용하고, 반복적으로 실행할 테스트 환경에서는 절대 사용하지 마세요.

그렇지 않습니다. '존재'는 노드가 DOM에 존재한다는 것을 의미하며, CSS로 숨겨지거나 화면 밖으로 벗어난 요소에도 적용됩니다. 사용자가 특정 요소를 볼 수 있는지 여부에 따라 테스트가 달라지는 경우, '존재' 확인과 함께 '요소가 표시될 때까지 기다리기' 조건을 추가하세요.

네, 그리고 현재 IDE에서는 필수 사항입니다. IDE의 텍스트 검증 명령은 요소 위치 지정자와 예상 문자열을 인수로 받는데, 이는 기존의 페이지 전체 검색보다 엄격하여 관련 없는 메뉴 항목이 애초에 충족하도록 의도되지 않은 검사를 통과하는 것을 방지합니다.

Code `export` 명령어를 사용하면 각 명령어가 대상 언어의 해당 명령문으로 변환되므로, 대기 단계는 명시적인 WebDriver 대기로 바뀝니다. 생성된 파일을 신뢰하기 전에 내용을 읽어보세요. 타임아웃 및 소프트 오류와 하드 오류의 동작 방식이 변환 과정에서 항상 온전히 유지되는 것은 아니기 때문입니다.

머신러닝 모델은 과거 실행 데이터를 분석하여 지속적으로 실패하는 것이 아니라 간헐적으로 실패하는 단계를 표시하는데, 이는 대기 단계 누락의 특징입니다. AI 기반 로케이터 복구 기능은 마크업 변경 시 새로운 선택기를 제안하여 또 다른 일반적인 원인인 대기 단계 누락 문제를 해결합니다.

이 기능은 기계적인 부분을 잘 처리합니다. 대기 단계를 예상 조건을 가진 WebDriverWait로 변환합니다. Rev생성된 존재 조건이 가시성 조건이어야 하는 경우가 많으므로, 타임아웃 시간과 조건을 확인하십시오.

로케이터는 현재 선택된 문서를 기준으로 평가되며, iframe은 별도의 로케이터로 처리됩니다. 먼저 프레임 선택 명령을 실행한 다음, 검사를 수행하고, 마지막으로 최상위 문서로 돌아가야 다음 단계가 잘못된 컨텍스트에서 검색되는 것을 방지할 수 있습니다.

이 게시물을 요약하면 다음과 같습니다.