如果在DOM

时间:2015-06-10 05:40:41

标签: javascript protractor chai cucumberjs

我对cucumberjs有疑问。我找不到办法确保 具有给定选择器的元素被呈现到DOM中。我正在使用 与柴的cucjs。 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;   
});

或者使用chai和promises。

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

然而,"最终"听起来很不愉快。我们希望确保最终不确定。 :)

Here可以在我的个人博客中查看有关此问题的文章。

2 个答案:

答案 0 :(得分:10)

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

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

我建议使用Chai的chai-as-promised插件来处理这样的情况。它提供eventually链,它将为您解析promise并在结果值上断言。上面的例子如下所示:

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

答案 1 :(得分:-1)

为什么在期望返回元素的承诺时我们使用“false”?也许你的意思是:expect(element.isPresent()).to.be.true