Selenium-Webdriver returns 双击操作时出现 StaleElementReferenceError

Selenium-Webdriver returns StaleElementReferenceError on doubleClick action

我正在使用 protractor-cucumber-framework 进行端到端测试,就在最近,我的双击方法停止工作并且从那以后一直在返回 StaleElementReferenceError。

所以我的代码如下:

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

双击returns

StaleElementReferenceError: stale element reference: element is not attached to the page document

但是当我这样做时:

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();

非常感谢对此问题的任何帮助或见解。

过时的元素错误通常是指 dom 中发生的变化,这意味着元素已移动或类似情况。如果您执行一次点击然后再次找到所有元素并再次点击是否有效?

我已经解决问题了!

问题是即使在执行双击操作后,外部 'each' 函数仍然存在,这会将浏览器重定向到另一个页面,并且该函数仍在寻找导致 StaleElementReferenceError 的元素,因为该元素现在不存在于重定向浏览器的页面上。

解决方案是简单地使用 'filter' 函数而不是 'each' 函数。