Selenium Simplified — Selenium에서 대기 이해하기 (Implicit vs Explicit Wait)

발행: (2026년 3월 11일 AM 04:40 GMT+9)
6 분 소요
원문: Dev.to

Source: Dev.to

번역할 텍스트가 제공되지 않았습니다. 번역이 필요한 본문을 알려주시면 도와드리겠습니다.

Source:

소개

이전 글에서는 Selenium이 페이지에서 요소를 찾기 위해 로케이터를 사용하는 방법을 배웠습니다.
초보자들은 페이지에 요소가 존재함에도 불구하고 NoSuchElementException이나 ElementNotInteractableException과 같은 오류를 자주 마주합니다.

그 원인은 보통 타이밍 문제입니다. 현대 웹 애플리케이션은 요소를 동적으로 로드하기 때문에 Selenium이 요소가 나타나기 전에 상호작용을 시도할 수 있습니다. Selenium은 실제 사용자가 하는 것보다 훨씬 빠르게 스크립트를 실행합니다:

  1. 페이지 열기
  2. 요소 찾기
  3. 버튼 클릭

페이지가 아직 백그라운드에서 콘텐츠를 로드 중이라면, Selenium은 아직 나타나지 않은 요소를 찾으려 시도하게 되고, 이로 인해 테스트가 실패합니다.

대기(Wait) 를 사용하면 특정 조건이 충족될 때까지 Selenium이 일시 정지하도록 할 수 있습니다(예: 요소가 보이게 되거나 클릭 가능해지거나 페이지 로딩이 완료될 때). 조건이 만족되면 Selenium은 스크립트 실행을 계속합니다.

Selenium은 두 가지 주요 대기 방식을 제공합니다:

  • 암시적 대기(Implicit Wait)
  • 명시적 대기(Explicit Wait)

Source:

암시적 대기

암시적 대기는 Selenium에게 요소를 검색할 때 지정된 시간만큼 대기하도록 지시합니다. 요소를 즉시 찾지 못하면 Selenium은 타임아웃에 도달할 때까지 계속 시도합니다.

// Set implicit wait to 10 seconds
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));

이 의미는

  • Selenium은 요소를 찾으려 할 때 최대 10초까지 대기합니다.
  • 요소가 더 일찍 나타나면 Selenium은 즉시 다음 단계로 진행합니다.
driver.findElement(By.id("loginButton")).click(); // waits up to 10 s if needed

요소가 로드되는 데 3초가 걸리면 Selenium은 그 3초를 기다린 뒤 클릭합니다.

Source:

명시적 대기

명시적 대기는 더 유연합니다. Selenium이 가시성, 클릭 가능 여부, 텍스트 존재와 같은 특정 조건을 기다리도록 할 수 있습니다.

WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));

WebElement element = wait.until(
    ExpectedConditions.visibilityOfElementLocated(By.id("loginButton"))
);

여기서 Selenium은 요소가 페이지에 표시될 때까지 기다립니다.

일반적인 Expected Conditions

  • visibilityOfElementLocated
  • elementToBeClickable
  • presenceOfElementLocated
  • titleContains

예시

wait.until(ExpectedConditions.elementToBeClickable(By.id("submit")));

이 코드는 요소와 상호 작용하기 전에 해당 요소가 클릭 가능하도록 보장합니다.

비교: 암시적 대 명시적 대기

특징암시적 대기명시적 대기
범위전역적으로 적용특정 요소에 적용
유연성제한적매우 유연함
사용법간단함더 많은 제어
복잡한 시나리오에 권장아니오

대부분의 최신 자동화 프레임워크에서는 명시적 대기가 선호됩니다. 이는 테스트 동작에 대한 더 나은 제어를 제공하기 때문입니다.

Thread.sleep()을 사용하지 말아야 하는 이유

일부 초보자는 테스트를 일시 정지하기 위해 Thread.sleep()을 사용합니다:

Thread.sleep(5000); // 정확히 5초 동안 일시 정지

이 접근 방식의 문제점

  • 테스트가 느려집니다
  • 신뢰성이 떨어집니다 (요소가 나중에 로드되면 실패)
  • 유지 보수가 어렵습니다

Selenium이 제공하는 내장 대기 기능을 사용하는 것이 훨씬 더 좋은 해결책입니다.

대기와 함께하는 일반적인 Selenium 테스트 흐름

Open Page

Find Element

Wait Until Element Is Ready

Perform Action

대기(Wait)를 포함하면 자동화 스크립트가 더 안정적이고 신뢰할 수 있게 됩니다. 타이밍 문제는 Selenium 테스트 실패의 가장 흔한 원인 중 하나입니다. 적절한 대기 사용은 Selenium이 요소가 준비된 경우에만 상호작용하도록 보장하여, 테스트가 다음과 같은 특징을 갖게 합니다:

  • 더 신뢰성 있음
  • 덜 불안정함
  • 유지보수가 쉬움

Series Recap & What’s Next

So far in this series we have covered:

  • Selenium architecture
  • Locators
  • Waits

Next article: Selenium Simplified — Handling Alerts, Frames, and Multiple Windows
These features are common in modern web applications and require Selenium to switch control between different contexts.

0 조회
Back to Blog

관련 글

더 보기 »