Testcafe реагирует на селекторы - PullRequest
0 голосов
/ 22 октября 2018

Я не совсем понимаю, как на самом деле работают селекторы testcafe реагируют.Я довольно новичок в JS, так что это может быть из-за того, что я не понимаю, как await работает в JS в целом.

Мне немного непонятно, когда селекторы реакции пытаются получить свои данные.Я пытался написать что-то вроде этого:

Объект страницы:

export default class ABTestShowPage {
  constructor() {
    this.statsRow = ReactSelector('Row').withProps('name', 'Actions');
  }
}

Тест:

test('Verifies the stats table has "No Actions Available" for completed test', async (t) => {
  const titleLink = abTestIndexPage.getABTestTitleLink('Completed One CTA');

  await t
    .click(titleLink)

  await waitForReact();

  const actionsRow = abTestShowPage.getStatsRow('Actions');

  await t
    .expect(abTestShowPage.statsRow.exists).ok();
});

Каждый раз, когда я пытался запустить тест, я получал следующееошибка теста:

A/B Test Show
✖ Verifies the stats table has "No Actions Available" for completed test

1) TypeError: Cannot read property 'exists' of undefined

  Browser: Chrome 69.0.3497 / Mac OS X 10.13.6

     369 |    .click(titleLink)
     370 |
     371 |  await waitForReact();
     372 |
     373 |  await t
   > 374 |    .expect(abTestShowPage.statsActionRow.exists).ok();
     375 |});
     376 |

Я пробовал разбрызгивать await в разных местах, но получал одинаковые результаты.

Единственный способ пройти тест - полностью изменить структуру, чтобы она выглядела следующим образом:

Объект страницы:

export default class ABTestShowPage {
  constructor() {
    this.statsRow = ReactSelector('Row');
  }

  getStatsRow(rowName) {
    return this.statsRow.withProps('name', rowName);
  }
}

Тест:

test('Verifies the stats table has "No Actions Available" for completed test', async (t) => {
  const titleLink = abTestIndexPage.getABTestTitleLink('Completed One CTA');

  await t
    .click(titleLink)

  await waitForReact();

  const actionsRow = abTestShowPage.getStatsRow('Actions');

  await t
    .expect(actionsRow).ok();
});

У меня были похожие проблемы, когда мне нужно (на первый взгляд случайным образом) добавить дополнительные waitForReact команды или await s, и я просто не совсем понимаю, что делаю неправильно.Почему первый способ не вычисляет селектор React так, как я ожидаю?Страница полностью загружается, когда я звоню waitForReact, так почему простой ReactSelector не находит компонент?Такое ощущение, что мне нужно добавить дополнительную сложность к моему объекту страницы, чтобы требовать такие функции, особенно когда в этом случае это в значительной степени одноразовое использование, потому что я не собираюсь искать другие строки в этой конкретной таблице.

Спасибо!

1 Ответ

0 голосов
/ 22 октября 2018

Похоже, вы набрали abTestShowPage.statsActionRow вместо abTestShowPage.statsRow.Смотрите трассировку стека:

     373 |  await t
   > 374 |    .expect(abTestShowPage.statsActionRow.exists).ok();
     375 |});
     376 |

Ваш код просто в порядке.Если вы получили другие ошибки с тем же кодом, что и в первом варианте, обновите ваш пост и включите их.

...