- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试学习PageFactory模型。我理解这样一个事实:当我们执行 initElements
时,WebElements 就被定位了。举例来说,我单击了一个 Web 元素,因此 DOM 中的其他 Web 元素之一发生了变化。现在,显然我会在这里得到一个 StaleElementReferenceException
。我该如何解决这个问题?
我是否应该再次查找特定的 WebElement,并知道 DOM 中 WebElement 的属性可能会发生更改?或者还有其他方法来处理这个问题吗?
最佳答案
StaleElementReferenceException延伸WebDriverException并指示该元素的先前引用现在已过时,并且该元素引用不再存在于页面的 DOM 上。
<小时/>StaleElementReferenceException
如下:
ID
的(新)元素替换。或其他属性。findElement()
或findElements
再次寻找该元素。当我们执行 initElements 时,WebElement 位于:当您调用 initElements()
时方法,该页面的所有WebElement都将被初始化。例如,
LoginPageNew login_page = PageFactory.initElements(driver, LoginPageNew.class);
这行代码将初始化 LoginPageNew.class
范围内定义的所有静态 WebElement无论何时何地从自动化脚本调用它。
我点击了一个 Web 元素,因此 DOM 中的其他 Web 元素之一发生了变化:这几乎是可能的。
click()
在<input>
上标记不会触发 HTML DOM 上任何 WebElement 的任何更改。 click()
在<button>
上标签或 <a>
标签可以调用 JavaScript 或 Ajax ,而后者又可以删除元素或可以用具有相同 ID
的(新)元素替换(先前的)元素。或其他属性。因此,如果WebDriver抛出StaleElementReferenceException,这意味着即使元素仍然存在,引用也会丢失。我们应该放弃当前的引用,并在它附加到 DOM 时再次定位 WebElement 来替换它。这意味着您必须通过 initElements()
再次重新初始化该类。方法,该方法又重新初始化该页面中定义的所有WebElement。
如果旧元素已被新的相同元素替换,简单的策略是调用 WebDriverWait与 ExpectedConditions 结合使用寻找元素。
您可以在以下位置找到相关的详细讨论:
<小时/>以下是本次讨论的引用资料:
关于selenium - PageFactory 中的 StaleElementReference 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54898379/
我正在尝试使用 POM 创建一个测试框架,但每当我使用 PageFactory 时,它都会给出一个 NullPointerException。 我只是想打开应用程序并检查给定元素在页面上的位置。 这是
我正在用 C# 创建一个测试自动化框架。在项目的顶部,我有“使用 OpenQA.Selenium.Support.PageObjects;”,但是当我尝试引用 PageFactory.initElem
我正在我的页面对象模型自动化框架中实现 pagefactory。我现有的框架在没有 pagefactory 的情况下工作正常。现在我正在实现 pagefactory 来调用元素。我面临一个问题,即 P
我实现了一个 PageFactory BasePage 类,它保存测试页面的 webements。我在 BasePage 中为 WebDriver 驱动程序引用创建了一个构造函数 import org
我在 Java 中有这个带有 css 定位器的等待命令,然后单击它。 new WebDriverWait(driver, 10).until(ExpectedConditions.presence
我在一个页面上有多个元素,我想使用 PageFactory 初始化它们。 我试过使用下面的方法 @FindBy(xpath = "//*[contains(@class,'x-grid-tree-no
我最近开始使用 Selenium2 和页面对象模式 与 Page Factory 结合使用。我有声明的 WebElements @FindBy 由 PageFactory 初始化的注解,当 类被初始化
我正在尝试学习 PageFactory 模型。我明白当我们做 initElements 的时候,WebElements 位于。例如,我单击一个 web 元素,因此 DOM 中的其他 web 元素之一发
有没有办法通过作为另一个注释实现的动态等待来扩展 Selenium 页面模型。 .. 我已经实现了 wait4element() ,我只想将其添加为另一个注释,类似于 @FindBy 。 我该怎么做?
我动态生成的定位器取决于将从列表中选择哪个元素。 例如,这是我生成的 ID: Function:TableName:0:submenuAction 0 是计数器,表示从列表中选择第一个元素。计数器前后
我遵循页面对象模型,并使用基类,该类具有所有常见且可重用的方法,并为我的 Web 应用程序的每个页面提供单独的页面。 现在我正在尝试在 BasePage 中创建一个可以在其他页面中使用的方法。在每个页
我有一个问题。两者有什么区别: @FindBy(id= "submit-button") WebElement submitButton; public void submitClick() {
这个问题在这里已经有了答案: StaleElementReference Exception in PageFactory (3 个答案) 关闭 4 年前。 在使用 Pagefactory 时,我直
我只是想知道 PageFactory.initElements(driver, this) 的工作原理,它如何填充 searchSuggestions webElement 并且如果我不使用 thre
我正在使用 selenium 页面工厂。在使用任何 WebElements 时,我收到空指针异常。 import java.io.IOException; import org.openqa.sele
我正在尝试学习PageFactory模型。我理解这样一个事实:当我们执行 initElements 时,WebElements 就被定位了。举例来说,我单击了一个 Web 元素,因此 DOM 中的其他
我正在尝试学习PageFactory模型。我理解这样一个事实:当我们执行 initElements 时,WebElements 就被定位了。举例来说,我单击了一个 Web 元素,因此 DOM 中的其他
我正在尝试学习PageFactory模型。我理解这样一个事实:当我们执行 initElements 时,WebElements 就被定位了。举例来说,我单击了一个 Web 元素,因此 DOM 中的其他
我在 Visual Studio 2010 中收到警告消息:“从未分配字段”。我使用在运行时分配字段的 Webdriver PageFactory,如何抑制此消息? 这里是代码示例: public c
我试图在我的 Selenium 测试中使用 PageObject 设计模式,并且我有以下一组 Page 类: PageObject 基类,它跟踪 WebDriver 和站点的基 URL。它还具有私有(
我是一名优秀的程序员,十分优秀!