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

2022-01-16 00:00:00 protractor javascript chai cucumberjs

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

I have a problem with cucumberjs. I cannot find a way to ensure that element with given selector is presented into DOM. I'm using cucumberjs with Chai. https://github.com/cucumber/cucumber-js isPresent returns object - no matter if the element exists or not. So the question is how to check if element is present in DOM.

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

I will edit the question to share one learned lesson. I read the documentation also want to thanks to Nathan Thompson. isPresent() returns a promise that will resolve to whether the element is present on the page.

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

代码示例有点误导.因此,如果您想知道 DOM 中是否存在具有给定选择器的元素,您必须使用如下内容:

The code examples is a little misleading. So if you want to expect if element with a given selector exist in DOM you must use something like this:

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

或者使用带有 promise 的 chai.

Or use chai with promises.

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

但是,最终"这个词听起来令人不快.我们希望确定最终不确定.:)

However, the word "eventually" sounds unpleasant. We want to be sure not eventually sure. :)

这里可以在我的个人博客中查看了有关此问题的文章.

Here can be viewed article about this question into my personal blog.

推荐答案

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

Almost all functions in Protractor return promises that will resolve into the values you actually want to test against. So if you're just trying to do something like the following, it will always fail because it's asserting on the promise object returned by isPresent:

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

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

I would recommend using the chai-as-promised plugin for Chai to handle situations like this. It provides the eventually chain that will resolve promises for you and assert on the resulting value. The above example would look like this:

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

相关文章