여기 상황이 있습니다.StaleElementReference 예외 디버깅 - Selenium WebDriver
나는 editNewUser() 함수를 가지고있다.
public void editNewUser() throws Exception
{
driver.findElement(adminModuleDD).click();
wait.until(ExpectedConditions.visibilityOfElementLocated(searchRes));
List<WebElement> elements = wait.until(ExpectedConditions.visibilityOfAllElementsLocatedBy(uNames));
for(WebElement el : elements)
{
if(el.getText().equals(UserName))
{
el.click();
wait.until(ExpectedConditions.visibilityOfElementLocated(editUserHeading));
driver.findElement(editUser).click();
WebElement status_Dropdown = driver.findElement(By.xpath("//select[@id='systemUser_status']"));
Select status = new Select(status_Dropdown);
status.selectByVisibleText("Enabled");
}
}
}
UserName은 사용자 생성 중에 다른 함수에서 값을 얻는 공용 문자열 변수입니다.
이 스크립트에서는 사용자 목록이 들어있는 페이지로 이동합니다. 목록 '요소'에 모든 사용자 이름을 저장 한 다음 텍스트가 사용자 이름과 일치하는 목록의 각 요소를 반복합니다.
이제 내 test_run 스크립트에서 editNewUser()를 호출하는 다른 메소드가 있습니다.
일이 발생하면이 메소드는 if 블록에서 다음 명령을 실행합니다.
if(el.getText().equals(UserName))
{
el.click();
wait.until(ExpectedConditions.visibilityOfElementLocated(editUserHeading));
driver.findElement(editUser).click();
WebElement status_Dropdown = driver.findElement(By.xpath("//select[@id='systemUser_status']"));
Select status = new Select(status_Dropdown);
status.selectByVisibleText("Enabled");
}
그러나 빨리 다음 메서드가 호출 될 때, 그것은 실행을 중지하고 org.openqa.selenium.StaleElementReferenceException: Element not found in the cache - perhaps the page has changed since it was looked up
스택 추적이 라인 if(el.getText().equals(UserName))
을 의미 던졌습니다.
블록 내부의 명령이 실행되지만이 예외가 발생하는 이유는 무엇인지 말해 줄 수 있습니까?
el.getText(). equals (UserName) 조건 true 목록에서 나머지 요소의 위치가 변경되거나 페이지가 변경되어 셀렌 캐시에서 예외로 발견되지 않을 수 있습니다. 발생했습니다 .. 당신이 이것을 달성하는 경우 조건이 true이면 루프를 깨야합니다. –