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

由于陈旧的元素引用而导致的不稳定测试

单于扬
2023-03-14

类似于这里的问题。我的测试不稳定。尝试并捕获解决方案在这里不起作用。有解决这个问题的最佳实践吗?

共有2个答案

习和通
2023-03-14

可能存在编码问题,您在之前搜索一个元素,然后再使用该对象。

如果页面没有更改/重新加载,您不应该得到陈旧的元素。

薛博艺
2023-03-14

正如上面@lauda所说,StaleElementReferenceException清楚地表明,自上次获得对象引用以来,您正在与之交互的页面已经发生了更改。您必须仔细检查代码中这两点之间发生的情况,以确定导致页面重新加载的原因。这将帮助您决定如何在自动化框架的上下文中处理这种情况。

一些建议:

  • 不要使用@FindBy注释,而是为您的元素创建CSS或XPath选择器变量,然后无论您需要与元素交互,都使用findElementBy在您需要与它交互之前获取目标WebElement。(您可能仍然需要等待AJAX事件首先完成)
  • 重构您的框架代码,以便在您获得目标WebElement之前,正在执行某些操作的方法将等待页面重新加载或相关AJAX操作完成(例如,在我的测试系统性能最近下降之后)我在我的框架代码中找到了一个需要等待页面上的表重新加载的地方,所以我使用WebDriver等待在我与表中的项目交互之前等待加载微调器消失。)
 类似资料:
  • 我的WebDriver脚本只是在第1页(产品展示页)上找到元素,然后单击第1个元素,看看它是否工作,然后导航回产品展示页。 它抛出过时的元素引用错误,并且没有单击页面上的第二个元素,表示元素没有附加到页面。 代码是:

  • 我正在写一个小的抓取程序,它导航到一个包含链接列表的页面, 它单击第一个链接,打开一个新页面,获取一些详细信息,然后导航回包含链接列表的页面,然后尝试查找下一个链接,但我得到: 组织。openqa。硒。StaleElementReferenceException:stale元素引用:元素未附加到页面文档 你知道我该怎么避免吗?

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

  • 我有一个下拉列表,我第一次能够按索引选择元素。当我第二次尝试选择元素时,它会抛出陈旧的元素引用错误。我尝试了try catch block,显式等待,但没有任何效果。

  • 我有一个客户想要从网站上抓取一些信息。循环第一次工作,但第二次发生错误。有什么帮助吗?我也不建议去实际的网站,它很粗略。 代码: 错误: selenium.common.exceptions.StaleElementReferenceException:消息:陈旧的元素引用:元素未附加到页面文档 完全终端回溯: 完成回溯(最近的最后一次调用):文件"c:\用户\Heage\Coding\自由职业\

  • 问题内容: 我有一个经典的Java EE系统,具有JSF的Web层,用于BL的EJB 3和用于对DB2数据库进行数据访问的Hibernate 3。我在以下情况下苦苦挣扎:用户将启动一个过程,该过程涉及从数据库中检索大型数据集。检索过程花费一些时间,因此用户不会立即收到响应,变得不耐烦,并打开新的浏览器并再次启动检索,有时是多次。EJB容器显然没有意识到第一次检索不再相关的事实,并且当数据库返回结果