본문 바로가기
자동화(Automation)

Selenium_Wait

by Testengineer 2022. 8. 5.
반응형

웹은 비동기적 특성을 가지고 있기 때문에, 웹 드라이버는 DOM의 real-time 상태를 추적하지 않습니다.

자동화를 실행하다보면, 웹 페이지를 이동한 후 지시한 element를 찾으려고 할때 해당 element를 찾을 수 없는 오류가 발생하는 경우가 종종 발생합니다.

이런 경우를 해결하기 위해서 wait를 사용하게 되는데요.

이번 포스팅에서는 wait를 정리해서 올려보고자 합니다.

 

(1) 명시적 대기(Explicit wait)

명시적 대기는 설정한 조건이 통과될때까지 작성한 코드가 프로그램을 실행중지하거나 thread를 고정할 수 있게 해줍니다.

즉, 조건이 잘못된 값을 반환하는 동안에는 계속 시도하고 대기합니다.

명시적 대기 시간은 조건이 발생할때까지 대기할 수 있으므로 브라우저와 해당 DOM 및 웹 드라이버 스크립트 간의 상태 동기화에 적합합니다. 

다음은 해당 예시와 결과입니다.

모바일 다음웹에서 코로나 확진자 수를 element로 선언해서 해당 텍스트를 뽑아올 수 있게 해주는 간략한 내용이었습니다.

여기서 대기상태는 사용자의 필요 상태에 따라 다양하게 정의할 수 있습니다.

  • alert is present
  • element exists
  • element is visible
  • title contains
  • title is
  • elemenet staleness
  • visible text

 

(2) 묵시적 대기(Implicit wait)

두번째 유형은 제가 이미 웹페이지를 가져올 때 사용했던 묵시적 대기에 관한 방법입니다. 명확하진 않지만 묵시적으로 대기함으로써 이 유형은 웹 페이지에서 특정 element를 즉시 사용할 수 없고 로드하는데 시간이 필요할때 주로 사용됩니다.

element에 대한 implicit wait는 기본적으로 비활성화되어 있습니다.

+명시적 대기와 묵시적 대기를 혼합해서 사용하면 의도치 않은 대기시간이 나올 수 있습니다.

 

(3) FluentWait

마지막 세번째 유형은 fluentwait입니다. 

FluentWait instance는 조건을 확인하는 빈도와 함께 대기하는 시간의 최대 시간을 정의할 수 있습니다. 사용자는 대기중에 NoSuchElement와 같은 특정 예외를 무시하도록 대기상태를 줄 수 있습니다.

Wait<WebDriver> wait = new FluentWait<WebDriver>(driver)
		        .withTimeout(Duration.ofSeconds(30))
		        .pollingEvery(Duration.ofSeconds(5))
		        .ignoring(NoSuchElementException.class);

 

참고사이트 : https://www.selenium.dev/documentation/webdriver/waits/

반응형

'자동화(Automation)' 카테고리의 다른 글

Selenium_Assert&Verify  (0) 2022.08.20
Selenium_WebDriverManager  (0) 2022.08.10
Selenium_Scroll in Java  (0) 2022.08.01
Selenium_Mobile Emulation  (0) 2022.02.02
Selenium_isDisplayed(), isSelected(), isEnabled()  (0) 2021.01.23

댓글