javascript - cucumber-js 和 Chai 如何期望具有给定选择器的元素是否存在于 DOM 中

标签 javascript protractor chai cucumberjs

我对 cucumberjs 有疑问。我找不到办法确保 具有给定选择器的那个元素被呈现到 DOM 中。我在用着 cucumberjs 与 Chai 。 https://github.com/cucumber/cucumber-js isPresent 返回对象——不管元素是否存在。 所以问题是如何检查 DOM 中是否存在元素。

我将编辑问题以分享一个经验教训。我阅读文档还要感谢 Nathan Thompson。存在() 返回一个 promise ,该 promise 将解决该元素是否存在于页面上。

http://angular.github.io/protractor/#/api?view=Protractor.prototype.isElementPresent

代码示例有点误导。 所以如果你想知道 DOM 中是否存在具有给定选择器的元素,你必须使用这样的东西:

element(by.id('someId')).isPresent().then(function(isElementVisible) {
     expect(isElementVisible).to.be.true;   
});

或者使用带有 promises 的 chai。

expect(element.isPresent()).to.eventually.be.false

然而,“最终”这个词听起来很不愉快。我们想确定而不是最终确定。 :)

Here可以查看关于这个问题的文章进入我的个人博客。

最佳答案

Protractor 中的几乎所有函数都会返回 promise ,这些 promise 将解析为您实际想要测试的值。因此,如果您只是尝试执行以下操作,它总是会失败,因为它断言了 isPresent 返回的 promise 对象:

expect(element.isPresent()).to.be.false

我建议使用 chai-as-promised Chai 的插件来处理这种情况。它提供了 eventually 链,它将为您解决 promise 并断言结果值。上面的例子看起来像这样:

expect(element.isPresent()).to.eventually.be.false

关于javascript - cucumber-js 和 Chai 如何期望具有给定选择器的元素是否存在于 DOM 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30747931/

相关文章:

javascript - Node 看不到模块

javascript - 防止用户在表单字段中输入 < 或 >

javascript - ReferenceError: "document"未定义

javascript - Protractor - 在对话框容器中向下滚动以单击元素

javascript - Protractor 5.1.1 不适用于 Chrome 58

unit-testing - 如何为 MQTT 客户端编写测试?

javascript:WAITING使用 setInterval 的函数的结果

javascript - 我如何使用 browser.findElements() 来计算和遍历元素?

javascript - 比较数组时 Chai 断言错误

javascript - React Mocha-chai 测试无法识别 Prop 中的商店