使用Page Factory设计模式在Page Object中第二次调用webelement会产生陈旧元素异常

bri*_*rij 0 java selenium pageobjects selenium-webdriver staleelementreferenceexception

我们有一个带有Page Object和Page Factory设计模式的UI框架.在我的一个Page Object类中,我定义了一个webelement并调用它.在我的测试步骤类中,当这是在一个页面上时,我正在调用此webelement,而当我在另一个页面上时,我再次调用此元素.下面是我的代码的样子

PageObjectClass1:

@FindBy(how=How.XPATH, using="//*[contains(text(),'Successfully')]")
@CacheLookup
public WebElement successMsg;
Run Code Online (Sandbox Code Playgroud)

testStepClass:

//on first page 
PageObjectClass1.successMsg.isDisplayed()

//Then I navigate to some other page and again call this webelement

PageObjectClass1.successMsg.isDisplayed();
Run Code Online (Sandbox Code Playgroud)

在第二次调用它时,webdriver正在给我staleElementException.此xpath是通用xpath,将在每个页面中使用.这肯定存在于DOM中,所以不确定为什么它会给我这个例外?如何在不在每个页面对象类中创建此元素的情况下使用它?

给出的例外情况是:

org.openqa.selenium.StaleElementReferenceException:陈旧元素引用:元素未附加到页面文档

Guy*_*Guy 5

每次更改DOM或甚至只刷新时,所有先前定位的元素都会变得陈旧且不再有效.如果元素看起来相同则无关紧要,它是一个新元素.

Java ExpectedConditions(当前只有Java)刷新以等待在DOM中重绘元素

(new WebDriverWait(driver, 30)).until(ExpectedConditions.refreshed(ExpectedConditions.visibilityOf(successMsg)));
Run Code Online (Sandbox Code Playgroud)