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' 函数。
我正在使用 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' 函数。