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

时间:2019-05-20 15:30:20

标签: protractor chai

我有一个ElementArrayFinder,其中包含表的整行。 我想断言以检查它是否有子字符串(无所谓)。

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

已解决的row.getText()承诺将返回:

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


最接近的解决方案:

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

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


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

通过


任何建议表示赞赏。

2 个答案:

答案 0 :(得分:1)

只是为了避免造成误解-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)

答案 1 :(得分:0)

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

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

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