我编写了一个测试,以确保使用节点js在我的selenium测试中关闭滑动面板。每当我关闭面板时,我都使用条件elementIsNotVisible
。但是会引发错误noSuchElementError
。此错误在技术上是正确的,因为该元素不应再出现在页面上,但也不应该elementIsNotVisible
正确吗?
Test.js文件:
await driver.wait(until.elementIsVisible(testPage.addAllAnnotationsButton(driver)), 20000);
await testPage.exitGeneAnnotationsButton(driver).click();
await driver.wait(until.elementIsNotVisible(testPage.addAllAnnotationsButton(driver)), 20000);
Page.js文件:
const testPage = {
addAllAnnotationsButton: driver => driver.findElement(By.css(testPage.addAllAnnotationsButtonSELECTOR))
}
错误消息(注意 - 在调用elementIsNotVisible的行上抛出错误消息):
NoSuchElementError: no such element: Unable to locate element: {"method":"css selector","selector":"div.slideout.opened:nth-child(6) button.ui.button.medium:nth-child(2)"}
编辑1:请注意,我已尝试使用stalenessOf
,但仍会收到相同的错误。
答案 0 :(得分:0)
正如您所提到的,当您关闭面板时,使用条件 elementIsNotVisible :
此处关闭面板后, DOM 中不存在相应的网络元素。这就是你得到 NoSuchElement异常的原因。
建议:使用 invisiblityofElement 代替 elementIsNotVisible 。
虽然NoSuchElement
异常背后有很多原因,但最常见的一种方法是尝试与 frame / iframe 中的元素/元素进行交互,而不会切换Web驱动程序的焦点。
希望这会有所帮助。