8

我有 cucumberjs 的问题。我找不到一种方法来确保具有给定选择器的元素呈现到 DOM 中。我将 cucumberjs 与 Chai 一起使用。 https://github.com/cucumber/cucumber-js isPresent 返回对象 - 无论元素是否存在。所以问题是如何检查元素是否存在于 DOM 中。

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

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 与 promise 一起使用。

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

然而,“最终”这个词听起来令人不快。我们希望确定最终不确定。:)

这里可以在我的个人博客中查看关于这个问题的文章。

4

2 回答 2

10

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

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

我建议使用chai-as-promised插件来处理这种情况。它提供了eventually一条链,可以为你解决 Promise 并对结果值进行断言。上面的例子看起来像这样:

expect(element.isPresent()).to.eventually.be.false
于 2015-06-11T20:06:26.347 回答
-1

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

于 2017-07-12T11:18:01.207 回答