0

我们有一个带有页面对象和页面工厂设计模式的 UI 框架。在我的一个页面对象类中,我定义了一个 web 元素并调用它。在我的测试步骤类中,当它在一个页面上时,我调用了这个 webelement 一次,当它在另一个页面上时,我再次调用了这个 webelement。下面是我的代码的样子

页面对象类 1:

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

测试步骤类:

//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 中,所以不确定它为什么会给我这个异常?如何在不在每个页面对象类中创建此 web 元素的情况下使用它?

给出的例外是:

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

4

1 回答 1

6

每次 DOM 更改,甚至只是刷新时,所有先前定位的元素都会变得陈旧并且不再有效。元素看起来是否相同并不重要,它是一个新元素。

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

(new WebDriverWait(driver, 30)).until(ExpectedConditions.refreshed(ExpectedConditions.visibilityOf(successMsg)));
于 2018-10-18T04:57:26.550 回答