【问题标题】:How to perform assertion for all nodes of a selector?如何对选择器的所有节点执行断言?
【发布时间】:2017-09-11 12:16:27
【问题描述】:

在我的 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");
}

有没有我缺少的内置方法?

【问题讨论】:

  • .每个函数?
  • testcafe 在服务器端执行代码。没有jQuery
  • 我不熟悉testcafe。我刚刚检查了type definitionSelector,它似乎不包括任何形式的childrenchildNodes。对于公开的内容,child 函数(带有过滤器参数)可能会返回正确的选择器。
  • @ShanevandenBogaard:这就是为什么我使用countnth...child 也无济于事。问题基本上出在except 方法上,它只使用了选择器返回的第一项。
  • @Pytth:你不熟悉。 testcafe 是一个 node.js 应用程序,即一个服务器应用程序。它不在浏览器上下文中执行

标签: javascript typescript testing automated-tests testcafe


【解决方案1】:

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

【讨论】:

  • 我认为expectEach应该存在:-)
  • 就我而言,我不会创建复杂的断言。如果测试失败,它们可能会导致报告中出现复杂的错误消息。我更喜欢添加额外的代码行,以便在报告中包含更简单的错误。同时,请随时通过 TestCafe GitHub 存储库中的问题添加您的提案。
  • 我认为组合断言没有什么复杂的。 F.e.我需要检查两个元素之一是否存在(简单的 OR 语句)并且它不起作用。
【解决方案2】:

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

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}'.`));
})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-21
    • 2012-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多