量角器 - 以通用方式避免 StaleElementReferenceError

Ran*_*ath 5 javascript protractor

我正在使用量角器为 GWT 应用程序编写端到端测试。

这是一个相当大的应用程序,测试需要使用嵌套定位器。

Protractor在 Selenium WebElement 上有这些ElementFinderElementArrayFinder包装类,它们非常有用。我看到的优点之一是 Selenium WebElement 仅在调用 WebElement操作(click()、sendKeys() 等)时才被定位。

这种方法在许多情况下避免了StaleElementReferenceError

然而,仍然存在我们收到StaleElementReferenceErrors 的情况。调用操作 在 ElementFinders/ElementArrayFinders 的层次结构中就是这样一种情况。例如

var openCmd: protractor.ElementFinder
$('.main_panel').$('.items').$('.celllist').filter(function(elem, index) {
    return elem.$('.cellTitle').getText().then(function(text) {
        return text === 'Ranjith';
    });
}).first().$(".commandPanel a[title='Open']");

openCmd.click();
Run Code Online (Sandbox Code Playgroud)

在这里,它在页面的一部分中定位大提琴手,然后找到标题为“Ranjith”的单元格,然后在该单元格中定位标题为“打开”的命令(锚)。

当在 openCmd 上调用 click() 时,它将遍历定位器的层次结构(从 .main_panel 到命令)以定位命令 WebElement 并在相同位置执行 click()。现在,如果在此遍历或操作 (click()) 期间发生 DOM 刷新,则会抛出 StaleElementReferenceErrors。

我看过一些帖子,其中有使用重试方法的建议:

这两个都没有解决问题,我仍然得到 StaleElementReferenceErrors。

此外,我不希望我的所有测试开发人员都编写包装器或从他们的页面对象中调用额外的方法。我想在框架代码中实现这个重试,以便在后台顺利处理它,测试开发人员不必担心他们将正常使用量角器 ElementFinder 和 ElementArrayFinder 对象。

我正在研究一种解决方案,通过我自己的protractor.ElementArrayFinder.prototype.applyAction_()方法实现来进行重试递归,以在框架级别解决这个问题。

基本上是在 StaleElementReferenceErrors 上重试 n 次。

两个问题:

  • 是否有一种实现始终如一地对 StaleElementReferenceErrors 进行重试?
  • 为什么这种重试方法没有作为 Angular ElementArrayFinder 实现本身的一部分给出?

提前致谢,

兰吉斯