Java에서 오래된 요소 참조 예외를 처리하는 방법
Background:
What is StaleElementReferenceException? Stale means old, decayed, no longer fresh. Stale Element means an old element or no longer available element. Assume there is an element that is found on a web page referenced as a WebElement in WebDriver. If the DOM changes then the WebElement goes stale. If we try to interact with an element which is staled then the StaleElementReferenceException is thrown.
Selenium은 findElement/findElements가 사용될 때 참조 형식으로 모든 요소를 추적합니다. 그리고 요소를 재사용하는 동안 셀레늄은 DOM에서 요소를 다시 찾는 대신 해당 참조를 사용합니다. 그러나 때때로 AJAX 요청 및 응답으로 인해 이 참조가 더 이상 최신이 아니므로 StaleElementReferenceException이 발생합니다.
이 문제를 해결하는 방법을 알아보겠습니다. 인터넷에서 많은 사람들이 Lazy Initializer 또는 Page Object Model을 사용하여 Stale Element Exceptions를 최소화할 것을 제안한다는 것을 알고 있습니다. 그러나 이 방법은 완전한 증거이며 모든 프레임워크에서 작동할 수 있습니다.
Solution:
public void clickElement(WebElement element)
{
try
{
element.click();
}catch(StaleElementReferenceException stale)
{
System.out.println("Element is stale. Clicking again");
element = reInitializeStaleElement(element);
element.click();
}
}
//method to re-initialize the stale element
public WebElement reInitializeStaleElement(WebElement element)
{
//lets convert element to string, so we can get it's locator
String elementStr = element.toString();
elementStr=elementStr.split("->")[1];
String byType = elementStr.split(":")[0].trim();
String locator = elementStr.split(":")[1].trim();
locator=locator.substring(0,locator.length()-1);
switch(byType)
{
case "xpath":
return DRIVER.findElement(By.xpath(locator));
case "css":
return DRIVER.findElement(By.cssSelector(locator));
case "id":
return DRIVER.findElement(By.id(locator));
case "name":
return DRIVER.findElement(By.name(locator));
}
}
위의 코드는 참고용이므로 프로젝트에 맹목적으로 복사하지 마십시오.
이 방법에서 드라이버 인스턴스를 사용하는 방법을 알만큼 똑똑해야 합니다. 클릭 방법을 위한 Singleton 클래스를 생성하거나 프레임워크 디자인 패턴에 따라 이것을 TestUtil 클래스에 넣을 수 있습니다.
Reference
이 문제에 관하여(Java에서 오래된 요소 참조 예외를 처리하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/manishthakurani/how-to-handle-stale-element-reference-exception-in-java-2mf2텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)