如何对选择器的所有节点执行断言?

时间:2017-09-11 12:16:28

标签: javascript typescript testcafe

在我的testcafe测试中,我有一个匹配多个节点的选择器。我想在所有节点上执行断言,该节点由此选择器匹配。

这将仅对mySelector

返回的第一个元素执行断言
await t.expect(mySelector.innerText).eql("foo");

这将在所有元素上执行它,但它真的很冗长:

const count= await mySelector.count;
for (let i = 0; i < count; ++i) {
    await t.expect(mySelector.nth(i).innerText).eql("foo");
}

是否有内置的方法可以解决这个问题?

2 个答案:

答案 0 :(得分:1)

TestCafe没有像expectEach这样的方法,所以我认为你提出的方法是最好的。它添加了几行代码,但它清楚地说明了您要在测试中检查的内容。

答案 1 :(得分:1)

正如@Alexander Moskovkin所回答的那样,&#34; TestCafe没有像expectEach ...&#34;这样的方法。但是,我决定expectEach in my testcafe-utils module。如下面的示例用法所示,我建议在@message断言参数中插入eachAsync的@n param,以便在测试失败时知道哪个第n个元素导致失败。

&#13;
&#13;
const { Selector } = require('testcafe');
const tu = require('testcafe-utils');

const baseURL = 'http://www.imdb.com/title/tt0092400/ratings?ref_=tt_ov_rt';

fixture `IMDB`
  .page `${baseURL}`;

const mySelector = Selector('#main .title-ratings-sub-page table:nth-of-type(2) tr');

test('it', async t => {
  await tu.expectEach(mySelector, n => t.expect(mySelector.nth(n).innerText).match(/all/gi, `Failed on n '${n}'.`));
})
&#13;
&#13;
&#13;