>Java >java지도 시간 >Selenium WebDriver에서 부실 요소 참조 예외를 해결하는 방법은 무엇입니까?

Selenium WebDriver에서 부실 요소 참조 예외를 해결하는 방법은 무엇입니까?

DDD
DDD원래의
2024-11-17 20:13:021092검색

How to Resolve the Stale Element Reference Exception in Selenium WebDriver?

Selenium WebDriver의 오래된 요소 참조 예외: 문제 해결 및 해결

이전에 얻은 WebElement 참조가 유효하지 않게 되면 Selenium WebDriver의 오래된 요소 참조 예외가 발생합니다. 기본 DOM의 변경으로 인해. 이 문제는 요소가 동적으로 업데이트되거나 제거되어 기존 참조가 더 이상 사용되지 않게 렌더링될 때 발생합니다.

예외 원인

예외는 다음과 같은 경우에 발생할 수 있습니다.

  • DOM은 JavaScript를 사용하여 요소를 바꾸는 등 동적으로 조작됩니다.
  • AJAX는 페이지 업데이트를 요청하여 요소를 제거하거나 다시 만듭니다.
  • 브라우저 엔진 자체가 페이지를 변경합니다. 성능 최적화를 위한 DOM.

예제 코드 및 예외 세부 정보

제공된 코드 조각은 대화 상자가 열릴 때 DOM이 변경되므로 요소 인식 중에 예외가 발생합니다.

WebElement textElement = driver.findElement(By.name("createForm:dateInput_input"));

오류 추적에 다음 메시지가 표시됩니다.

org.openqa.selenium.StaleElementReferenceException: stale element reference: element is not attached to the page document

해결책: WebElement 참조 새로 고침

문제를 해결하려면 문제가 발생하면 이를 무효화할 수 있는 DOM 변경 후 WebElement 참조를 새로 고쳐야 합니다. 일반적으로 사용되는 솔루션은 다음과 같습니다.

  • ExpectedConditions를 사용하여 요소가 다시 표시될 때까지 명시적으로 기다립니다.
WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.name("createForm:dateInput_input")));
  • JavaScript 실행기를 사용하여 요소를 직접 찾습니다.
WebElement textElement = (WebElement) ((JavascriptExecutor) driver)
    .executeScript("return document.querySelector('input[name=\"createForm:dateInput_input\"]')");
  • driver.navigate().refresh()를 사용하여 페이지를 새로 고치고 요소를 다시 찾으세요.

추가 팁

  • 여러 작업에서 WebElement 참조를 사용하지 마세요. 각 작업 후 참조를 새로 고칩니다.
  • 테스트 실행 중에 오래된 요소 예외를 정기적으로 확인하고 복구 메커니즘을 포함합니다.
  • ExpectedConditions 및 WebDriverWait와 같은 동적 DOM 변경을 처리하기 위해 WebDriver의 내장 메커니즘을 사용합니다. 수업입니다.

위 내용은 Selenium WebDriver에서 부실 요소 참조 예외를 해결하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.