我正在使用量角器为GWT应用程序编写端到端测试。
这是一个相当大的应用程序,测试需要使用嵌套定位器。
量角器在Selenium WebElement上有这些 ElementFinder 和 ElementArrayFinder 包装类,它们非常有用。我看到的优点之一是只有在调用WebElement 操作(click(),sendKeys()等)时才会找到Selenium WebElement。
在许多情况下,此方法可避免 StaleElementReferenceError 。
但是仍有一些情况我们得到 StaleElementReferenceErrors 。调用动作在ElementFinders / ElementArrayFinders的层次结构中就是这样一种情况。 E.g。
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();
这里,它将在一个页面的一部分中找到一个大提琴手,然后 找到一个标题为“Ranjith'然后找到 命令(锚)标题'打开'在那个牢房里面。
当在openCmd上调用click()时,它将遍历定位器的层次结构(从.main_panel到命令)以找到命令WebElement并在其上执行click()。现在,如果在此遍历或操作(单击())期间发生DOM刷新,则会抛出StaleElementReferenceErrors。
我看过哪些帖子有建议使用重试方法:
这两个都没有解决问题,我仍然得到StaleElementReferenceErrors。
另外,我不希望我的所有测试开发人员编写包装器或从其页面对象调用额外的方法。我想在框架代码中实现这种重试,以便在后台顺利处理它,测试开发人员不必担心它们通常会使用量角器ElementFinder和ElementArrayFinder对象。
我正在研究一种解决方案,通过使用我自己的 protractor.ElementArrayFinder.prototype.applyAction _()方法在框架级别解决这个问题来进行重试递归。
基本上在StaleElementReferenceErrors上重试n次。
两个问题:
先谢谢,
兰芝斯