我有一个定位器数组,我需要运行一个断言来验证它是否包含某些文本。我知道这可以循环完成,但这似乎是一种乏味的方法,我想改进它。
Tedius 方法:
let textIsPresent : boolean = false;
for (let entry of arrayOfLocators) {
if(arrayOfLocators[entry].innerText().toContain("myText")){
textIsPresent = true;
break;
}
}
expect(textIsPresent).toBe(true)
有更好的方法吗?例如,使用匿名函数甚至内置智能函数?我不太擅长 Javascript/Typescript,希望得到任何支持。谢谢你
await expect(locator).toHaveText(['Text 1', 'Text 2', 'Text 3']);
注意:如果您传递一个数组作为期望值,则期望为:
例如,考虑以下列表:
<ul>
<li>Text 1</li>
<li>Text 2</li>
<li>Text 3</li>
</ul>
让我们看看如何使用断言:
// ✓ Has the right items in the right order
await expect(page.locator('ul > li')).toHaveText(['Text 1', 'Text 2', 'Text 3']);
// ✖ Wrong order
await expect(page.locator('ul > li')).toHaveText(['Text 3', 'Text 2', 'Text 1']);
// ✖ Last item does not match
await expect(page.locator('ul > li')).toHaveText(['Text 1', 'Text 2', 'Text']);
// ✖ Locator points to the outer list element, not to the list items
await expect(page.locator('ul')).toHaveText(['Text 1', 'Text 2', 'Text 3']);
希望这有帮助!
这是一种安全的方法,与剧作家的网络优先断言方法一致。
const keyword = 'for'
await expect(async () => {
const items = await page.locator('div.listItems');
items.forEach(item => {
expect(item, `list item should contain '${keyword}'`).toContain(keyword);
});
}
).toPass({ timeout: 5000 });
使用这种方法,await Expect(async () =>块内的函数将被轮询并重试最多 5 秒,直到它通过或超时失败。