首页 > 解决方案 > 如何检查 ElementArrayFinder 是否包含子字符串

问题描述

我有一个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');

通行证


任何建议表示赞赏。

标签: protractorchai

解决方案


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

推荐阅读