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

时间:2018-10-18 03:32:13

标签: java selenium selenium-webdriver pageobjects staleelementreferenceexception

我们有一个包含Page Object和Page Factory设计模式的UI框架。在我的一个Page Object类中,我定义了一个webelement并调用它。 在测试步骤类中,当我在一个页面上调用此webelement时,一次在另一个页面中调用该webelement。 以下是我的代码的外观

PageObjectClass1:

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

testStepClass:

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

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

PageObjectClass1.successMsg.isDisplayed();

第二次在webdriver周围调用它时,却给我staleElementException。该xpath是通用xpath,将在每个页面中使用。这肯定存在于DOM中,所以不确定为什么会给我这个异常吗? 如何在每个页面对象类中都没有创建此webelement的情况下使用它?

给出的异常是:

  

org.openqa.selenium.StaleElementReferenceException:过时的元素   参考:元素未附加到页面文档

1 个答案:

答案 0 :(得分:5)

每次更改DOM或什至只是刷新DOM时,所有先前定位的元素都会陈旧且不再有效。元素看起来是否相同都没关系,它是一个新元素。

Java ExpectedConditions(目前只有Java)具有refreshed,以等待元素在DOM中重新绘制

(new WebDriverWait(driver, 30)).until(ExpectedConditions.refreshed(ExpectedConditions.visibilityOf(successMsg)));