본문으로 건너뛰기
SDETRole
SDETRole

용어집 · UI 자동화

암시적 대기(Implicit Wait)

영어: Implicit wait

다른 이름: 암묵적 대기, implicitlyWait, 임플리싯 웨이트

정의

모든 findElement 호출이 NoSuchElementException을 던지기 전에 정해진 시간까지 계속 폴링하게 만드는 Selenium의 전역 설정입니다.

암시적 대기(Implicit wait)는 WebDriver에게 포기하기 전에 정해진 시간 동안 요소를 계속 찾으라고 지시합니다. 드라이버 세션마다 한 번 설정하면 그 이후의 모든 findElement와 findElements 호출에 적용됩니다. 여러분이 고른 지점이 아니라 요소 탐색 내부에서 조용히 대기가 일어나기 때문에 “암시적”이라고 부릅니다. 기본값은 0입니다.

예시 (Selenium 4, Java)

driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(5));

// Polls for up to 5 seconds for the element to exist in the DOM
WebElement email = driver.findElement(By.id("email"));

// findElements also waits up to 5 seconds, then returns an empty list
List<WebElement> errors = driver.findElements(By.cssSelector(".error"));

Selenium 4에서는 Duration 오버로드를 사용해야 합니다. 이전의 implicitlyWait(long, TimeUnit)은 deprecated되었습니다.

명시적 대기와의 차이

암시적 대기 명시적 대기
범위 세션의 모든 요소 탐색 테스트의 한 지점에서 조건 하나
기다리는 대상 요소가 DOM에 존재하는 것 모든 조건: 표시됨, 클릭 가능, 텍스트 존재, 사라짐
설정 위치 드라이버에 한 번 WebDriverWait로 인라인

암시적 대기는 요소가 보이거나 활성화될 때까지 기다리지 않습니다. 버튼이 존재하지만 아직 비활성 상태라면 findElement는 즉시 반환하고, 클릭은 실패하거나 아무 일도 일어나지 않을 수 있습니다.

많은 팀이 피하는 이유

  • 명시적 대기와 섞으면 예측할 수 없습니다. 명시적 대기 내부의 탐색에도 암시적 타임아웃이 적용되기 때문에 Selenium 공식 문서는 둘을 함께 쓰지 말라고 경고합니다.
  • 무언가가 없는지 확인하는 작업이 느려집니다. findElements(...).isEmpty()는 요소가 올바르게 없는 경우에도 매번 암시적 타임아웃 전체를 기다립니다.
  • 의도가 숨겨집니다. 어떤 단계가 실제로 대기가 필요한지 코드를 읽는 사람이 알 수 없습니다.

일반적인 권장 사항은 암시적 대기를 0으로 두고 필요한 곳에 명시적 대기를 쓰는 것입니다. 레거시 스위트가 암시적 대기에 의존한다면 짧게 유지하고, 그것을 제거하지 않은 채 명시적 대기를 덧붙이지 마세요.

SDETRole 전체에서 검색할 내용을 입력하세요.

Pagefind 전문 검색 · 브라우저에서 실행됩니다 검색 페이지 열기 →