在Testcafe中,如何等待同一选择器的第二个元素出现?

时间:2019-06-25 21:37:20

标签: automated-tests e2e-testing web-testing testcafe

我有一个场景,其中同一个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是否存在,并且它在呈现时会看到第一个元素,并立即失败。我想等第二个。

有什么想法吗?

2 个答案:

答案 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;

您可以在此处阅读更多内容 https://devexpress.github.io/testcafe/documentation/test-api/selecting-page-elements/selectors/using-selectors.html#check-if-an-element-exists

答案 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作为第二个元素,然后断言它存在。虽然我认为您应该检查它是否存在并显示(可见)