我正在使用webdriverIO,Mocha和Chai进行一些自动化测试。当我想验证元素是否被删除时,我一直遇到同样的问题。
我在购物篮中工作,我删除了一个项目,然后验证它已经消失了。该物品需要一段时间才能消失,所以如果我立即达到预期,该物品仍然在那里。
我通过这样做解决了这个问题:
browser.waitForExist(deletedProduct, 5000, true)
expect (boodschappenLijstPage.isProductPresent(SKU), 'the removed item was still there' ).to.equal(false)
webdriverIO waitfor命令等待产品消失,之后chai期望检查它是否消失。
我遇到的问题是期望永远不会失败。如果没有正确删除产品,waitfortimeout将在我到达expect部分之前抛出错误,这意味着只有在产品消失时才会达到期望部分
我已阅读了柴的文档,但我似乎找不到这样做的方法。
任何人都可以表现出等待产品消失的方式,而不会错过预期(我不想使用浏览器。因为显而易见的原因)
答案 0 :(得分:0)
您可以使用try catch
并基本上等待错误。当元素从DOM中消失时,selenium将抛出NoSuchElementError
,我们可以使用它。
isNotPresent(element) {
try {
return !element.isVisible()
} catch (error) {
return true
}
}
// or wait for element to disappear from dom
waitForNotVisible(element) {
browser.waitUntil(() => {
try {
return !element.isVisible()
} catch (error) {
return true
}
})
}
答案 1 :(得分:0)
引用this
webElement.waitForDisplayed({ reverse: true });
答案 2 :(得分:0)
如果您要验证某个元素是否已消失,那么使用 expect
是正确的解决方案,但您应该使用 Webdriver-expect 断言而不是 chai expect 断言。虽然 chai 断言立即检查状态,但 WebdriverIO-expect 断言内置了 waitFor 功能。下面是一个例子:
let deletedProduct = $(/* your xpath/CSS selector/*);
expect(deletedProduct).not.toBeDisplayed();
断言与使用带有反向标志的 waitForDisplayed 之间的区别在于,某些报告器(例如 Allure)会将您的测试报告为 broken,而该测试应报告为 failed< /em>。例如,当我们运行测试并使用 waitForDisplayed 时,所有失败的测试都标记为黄色。当我们使用 expect 时,测试被标记为红色。
这是 WebdriverIO Expect matchers 的文档。他们没有非常清楚地记录 .not
方法,但在我的示例中,您可以看到我在 toBeDisplayed 调用之前添加了 .not。
同样,这个 expect 将等待 wdio.conf.js 中指定的超时,就像 waitFors 一样。