我有一个场景,其中同一个className
的多个元素一个接一个地出现(取决于服务器响应)。
我要达到的目的是只有在存在相同选择器的2个元素之后才通过测试,但是目前看来,测试失败了,因为它不断识别1个元素,然后直接失败而没有等待第二个一个。
这是我的代码(从外部用count
参数(例如2)调用)-
import { Selector } from 'testcafe';
export const validateMsg = async (t, headlineText, count = 1) => {
const msgHeadline = Selector('.myClassName').withText(headlineText).exists;
const msgHeadLineExists = await t
.expect(msgHeadline.count)
.gte(count, `Received less than ${count} desired messages with headline ${headlineText}`);
return msgHeadLineExists;
};
我认为发生这种情况是因为我正在检查msgHeadline
是否存在,并且它在呈现时会看到第一个元素,并立即失败。我想等第二个。
有什么想法吗?
答案 0 :(得分:9)
只需从选择器中删除.exists
,它会返回布尔值,然后对其调用.count将会使测试失败。
const msgHeadline = Selector('.myClassName').withText(headlineText);
const msgHeadLineExists = await t
.expect(msgHeadline.count)
.gte(count, `Received less than ${count} desired messages with headline ${headlineText}`);
return msgHeadLineExists;
答案 1 :(得分:3)
如果两个元素具有相同的文本,并且只有这个元素具有特定的className
,则可以使用nth()
function
const msgHeadline = Selector('.myClassName')..withText(headlineText).nth(1);
await t
.expect(msgHeadline.exists).ok(`Received less than ${count} desired messages with headline ${headlineText}`)
在这里,您使用headlineText
作为第二个元素,然后断言它存在。虽然我认为您应该检查它是否存在并显示(可见)