В Testcafe, как мне ждать появления второго элемента того же селектора? - PullRequest
5 голосов
/ 26 июня 2019

У меня есть сценарий, в котором несколько элементов одного и того же 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 ]

9 голосов
/ 26 июня 2019

Просто удалите .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

3 голосов
/ 26 июня 2019

Если оба элемента имеют одинаковый текст и только эти элементы имеют этот конкретный 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 и затем утверждаете, что он существует. Хотя я думаю, что вы должны проверить, что он существует и отображается (видимый)

...