Selenium-Webdriver在doubleClick操作上返回StaleElementReferenceError

时间:2018-12-24 08:07:23

标签: selenium-webdriver protractor cucumberjs

我正在使用量角器-黄瓜框架进行e2e测试,最近,我的双击方法停止工作,此后一直返回StaleElementReferenceError。

所以我的代码如下:

 generic.tableRows().each((element) => {
  element.all(by.tagName('td')).each((tdElement) => {
    tdElement.getText().then((rowCellText) => {
      if (rowCellText === identifier) {
        browser.actions().doubleClick(tdElement).perform();
      }
    });
  });
});

双击返回

  

StaleElementReferenceError:过时的元素引用:元素未附加到页面文档

但是当我这样做时:

tdElement.click();

找到并单击了元素。没有错误返回。

我尝试过的事情:

browser.wait(EC.presenceOf(tdElement), 10000).then(() => {
    browser.actions().doubleClick(tdElement).perform();
 });

-

browser.actions().mouseDown(tdElement).mouseUp().perform();
browser.sleep(1000); // Tried even without a hard wait
browser.actions().click(tdElement).perform();

-

tdElement.click().then(() => {
  browser.sleep(800); // Tried even without a hard wait
  tdElement.click();
});

-并且

browser.actions().click(tdElement).click(tdElement).perform();

对于此问题的任何帮助或见解,将不胜感激。

2 个答案:

答案 0 :(得分:1)

我已经解决了问题!

问题在于,即使执行了双击操作(将浏览器重定向到另一个页面),外部的“每个”函数仍然仍然存在,并且该函数仍在寻找导致StaleElementReferenceError的元素,因为该元素现在没有重定向浏览器的页面上不存在。

解决方案是只使用'filter'函数而不是'each'函数。

答案 1 :(得分:0)

陈旧的元素错误通常是指dom发生的变化,这意味着元素已移动或类似的情况。如果您先单击然后再次查找所有元素并再次单击,是否可以正常工作?