Я не совсем понимаю, как на самом деле работают селекторы 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
не находит компонент?Такое ощущение, что мне нужно добавить дополнительную сложность к моему объекту страницы, чтобы требовать такие функции, особенно когда в этом случае это в значительной степени одноразовое использование, потому что я не собираюсь искать другие строки в этой конкретной таблице.
Спасибо!