如何使用webdriverIO,Mocha和Chai验证元素

时间:2018-04-25 10:10:31

标签: mocha chai webdriver-io

我正在使用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部分之前抛出错误,这意味着只有在产品消失时才会达到期望部分

我已阅读了柴的文档,但我似乎找不到这样做的方法。

任何人都可以表现出等待产品消失的方式,而不会错过预期(我不想使用浏览器。因为显而易见的原因)

3 个答案:

答案 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 一样。