我有一个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');
通过
任何建议表示赞赏。
答案 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)
我查看了蔡的文档,这似乎是不可能的。
我可以看到两种解决问题的方法:
string[]
的承诺,然后遍历每个元素并使用.includes('expected text')
进行检查。filter()
上使用量角器的ElementArrayFinder
在每个元素上使用getText()
。使用if语句检查.includes('expected text')
,并检查新ElementArrayFinder
的长度是否大于0。