Javascript 由于元素引用陈旧,测试不稳定

Javascript 由于元素引用陈旧,测试不稳定,javascript,selenium,protractor,Javascript,Selenium,Protractor,与问题类似。我的测试不稳定。“尝试捕捉”解决方案在这里不起作用。有没有解决这个问题的最佳实践?正如@lauda在上面所说的,StaleElementReferenceException清楚地表明,自上次获得对象引用以来,您正在与之交互的页面已经发生了更改。您必须仔细检查代码中这两点之间发生的情况,以确定是什么导致页面重新加载。这将帮助您决定如何在自动化框架的上下文中处理这种情况 一些建议: 不要使用@FindBy注释,而是为元素创建CSS或XPath选择器变量,然后在需要与元素交互之前,在任何

与问题类似。我的测试不稳定。“尝试捕捉”解决方案在这里不起作用。有没有解决这个问题的最佳实践?

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

一些建议:

  • 不要使用@FindBy注释,而是为元素创建CSS或XPath选择器变量,然后在需要与元素交互之前,在任何需要与元素交互的地方使用findElementBy获取目标WebElement。(您可能仍然需要等待AJAX事件首先完成)
  • 重构您的框架代码,以便在获得目标WebElement之前,正在执行某些操作的方法将等待页面重新加载,或者等待相关AJAX操作完成(例如,最近我的测试系统性能下降后,我在框架代码中找到了一个位置,需要等待页面上的表重新加载,因此我使用WebDriverWait等待加载微调器消失,然后再与表中的项目进行交互。)

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

一些建议:

  • 不要使用@FindBy注释,而是为元素创建CSS或XPath选择器变量,然后在需要与元素交互之前,在任何需要与元素交互的地方使用findElementBy获取目标WebElement。(您可能仍然需要等待AJAX事件先完成)
  • 重构您的框架代码,以便在获得目标WebElement之前,正在执行某些操作的方法将等待页面重新加载,或者等待相关AJAX操作完成(例如,最近我的测试系统性能下降后,我在框架代码中找到了一个位置,需要等待页面上的表重新加载,因此我使用WebDriverWait等待加载微调器消失,然后再与表中的项目进行交互。)

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


      如果页面未更改/重新加载,则不应获取过时的元素。

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


      如果页面未被更改/重新加载,则不应使元素过时。

      您需要确保页面已完全加载,有时开发人员可以使用代码在第一次加载页面后加载某些内容,进行重新加载。有时我在表上循环并读取值,这意味着没有加载任何内容,但它会抛出e例外可能存在编码问题,您在之前搜索某个元素,然后再使用该对象。如果页面未更改/重新加载,则不应获得过时的元素。是的,您是对的,在这种情况下,这是一个编码问题。您需要确保页面已完全加载,有时开发人员可以使用代码在加载后加载某些内容页面在第一次加载时进行重新加载。有时我在一个表上循环并读取值,这意味着没有加载任何内容,但它会引发异常。可能存在编码问题,您以前搜索元素,以后使用该对象。如果页面没有更改/重新加载,您不应该得到过时的元素。是的,您是对的,在这种情况下,这是一个编码问题