当前位置: 首页 > 知识库问答 >
问题:

在使用Page Factory设计模式的Page对象中第二次调用webelement时会出现陈旧元素异常

翁建弼
2023-03-14

我们有一个带有页面对象和页面工厂设计模式的UI框架。在我的一个页面对象类中,我定义了一个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?

共有1个答案

景康安
2023-03-14

每次更改DOM,甚至只是刷新DOM,所有以前定位的元素都会变得陈旧,不再有效。如果元素看起来是一样的,它是一个新的元素

Javaexpectedconditions(当前只有Java)具有refreshed以等待在DOM中重绘元素

(new WebDriverWait(driver, 30)).until(ExpectedConditions.refreshed(ExpectedConditions.visibilityOf(successMsg)));
 类似资料:
  • 我有三个类。一个用于从网页中获取所有元素,一个用于使用这些元素执行操作,一个用于测试脚本。当我从测试脚本调用函数时,我得到一个空指针异常。我发现这是因为我使用了@FindBy注释,但我不知道如何解决这个问题。 元素类别: 操作类: 测试脚本: 当我将WebDriver对象从测试脚本传递到element类时,没有例外。由于没有WebDriver实例化,所以在使用用FindBy注释初始化的元素时会出现

  • 我正在使用驱动程序。findelements(By.xpath(“//*);要检索页面上的所有元素,但是在IE9/IE10上,我得到了一个陈旧的元素异常。我如何处理它?请帮助我。 错误如下所示:

  • 不管怎样,我可以用参数化调用我的网络元素,这样我就可以在我的任何方法上使用它们。 就像我们假设我想与表记录交互一样,因为我正在使用: 有没有办法,我可以参数化的WebElement使用pageFactory.不是PageObject。

  • 我的WebDriver脚本只是在第1页(产品展示页)上找到元素,然后单击第1个元素,看看它是否工作,然后导航回产品展示页。 它抛出过时的元素引用错误,并且没有单击页面上的第二个元素,表示元素没有附加到页面。 代码是:

  • 问题内容: 我在Selenium 2 Web驱动程序测试中具有以下代码,该代码在调试时有效,但是在构建中运行它时,大多数情况下会失败。我知道这一定与未刷新页面的方式有关,但不知道如何解决它,因此,任何有关我做错事情的指针都应该受到赞赏。我正在使用JSF primefaces作为我的Web应用程序框架。当我单击添加新链接时,会出现一个弹出对话框,其中包含一个输入框,我可以在其中输入日期,然后单击“保