我们有一个包含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:过时的元素 参考:元素未附加到页面文档
答案 0 :(得分:5)
每次更改DOM或什至只是刷新DOM时,所有先前定位的元素都会陈旧且不再有效。元素看起来是否相同都没关系,它是一个新元素。
Java ExpectedConditions
(目前只有Java)具有refreshed,以等待元素在DOM中重新绘制
(new WebDriverWait(driver, 30)).until(ExpectedConditions.refreshed(ExpectedConditions.visibilityOf(successMsg)));