如何检查 ElementArrayFinder 是否包含子字符串

How to check does ElementArrayFinder contains substring

我有一个 ElementArrayFinder,其中包含一整行 table。 我想做一个断言来检查它是否有一个子串(在哪里都无所谓)。

const row: ElementArrayFinder = $$('div > div#myRow');

已解决 row.getText() returns 的承诺:

['id', 'some data', 'expected text xoxo', 'some more data']


最接近的解:

expect(row.getText()).to.eventually.deep.includes('expected text');

returns: AssertionError: expected [ Array(4) to deep include 'expected text']


expect(row.getText()).to.eventually.deep.includes('expected text xoxo');

通过


感谢任何建议。

我查看了 chai 的文档,这似乎是不可能的。

我可以看到两种解决问题的方法:

  1. 解决对 string[] 的承诺,然后遍历每个元素并使用 .includes('expected text').
  2. 检查
  3. ElementArrayFinder 上使用量角器的 filter(),在每个元素上使用 getText()。使用 if 语句检查 .includes('expected text'),并检查新 ElementArrayFinder 的长度是否大于 0.

为了避免误解 - elementArrayFinder 可能没有元素的文本值。最好的想法是 elementFinder 是一个参考如何在页面上找到你的元素(只是方向)

现在,由于您现在可以 .getText() 您的 elementArrayFinder,因此您可以很容易地完成您想要做的事情。但在此之前请记住,只有当您的数组元素恰好等于您的 'expected text' 时,先前的答案才有效。例如,

expect('expected text xoxo', 'some more data']).toContain('expected text xoxo') // this succeed
expect('expected text xoxo', 'some more data']).toContain('expected text') // this fails
// because 'expected text xoxo' !== 'expected text'

但是如果你想检查它们数组的任何元素是否部分包含一个字符串,那么使用 vanilla js array.some()

let arr = ['id', 'some data', 'expected text xoxo', 'some more data'];
expect(arr.some((item)=>{return item.includes('expected text')})).toBe(true)