Я использую объектную модель страницы для хранения локаторов и бизнес-функций, характерных для определенной страницы тестируемого приложения.Вы можете увидеть образец шаблона стиля страницы здесь
https://github.com/bhreinb/SYSTAC
Все объекты страницы проходят через метод, называемый pageLoaded()
, который можно найти в приложении.объект тестовой страницы.pageLoaded
используется на базовой странице.Каждый объект страницы должен реализовывать этот метод, или инфраструктура выдает исключение, чтобы заставить пользователя реализовать это.pageLoaded
проверяет атрибуты страницы, принадлежащей тестируемому приложению (например, заголовок страницы, уникальный элемент на странице и т. Д.), Чтобы убедиться, что мы находимся на целевой странице.
Я нашел, что это работает нормальнов большинстве случаев, но когда навигация по страницам происходит с несколькими перенаправлениями, я должен ждать, пока элементы будут существовать и быть видимыми, так как TestCafe преждевременно взаимодействует с тестируемым приложением.Вот мой пример кода
pageLoaded() {
this.userNameLabel = Selector('[data-automation-id="userName"]').with({ visibilityCheck: true });
this.passWordLabel = Selector('[data-automation-id="password"]').with({ visibilityCheck: true });
logger.info('Checking Elements That Contain UserName & PassWord Labels For Existence To Confirm We Are On Tenant\'s Target Page');
const promises = [
this.userNameLabel.exists,
this.passWordLabel.exists,
];
return Promise.all(promises).then((elementsExists) => {
const userNameVisible = elementsExists.pop();
const passWordVisible = elementsExists.shift();
if ((userNameVisible) && (passWordVisible)) {
return true;
}
logger.warn(`PageLoaded Method Failure -> Element Containing UserName Is Visible '[${userNameVisible}]'`);
logger.warn(`PageLoaded Method Failure -> Element Containing PassWord Is Visible '[${passWordVisible}]'`);
return false;
});
}
, который потерпит неудачу, но пройдет, если я изменю обещания, чтобы быть похожим на это
const promises = [
t.expect(this.userNameLabel.exists).ok({ timeout: 20000 }),
t.expect(this.passWordLabel.exists).ok({ timeout: 20000 }),
];
, который не является шаблоном, который мне особенно нравится, поскольку я не делаю 'Я не хочу, чтобы логика утверждений была в шаблоне объекта страницы, плюс я хочу, чтобы результат обещаний возвращал значение true или false, если это имеет смысл.В любом случае я изменил ожидание, чтобы работать с методом, например
t.expect(pageLoaded()).ok({ timeout: 20000 })
или любой другой альтернативой.Кроме того, как вы можете указать TestCafe для ожидания события window.onload, а не Domcontentloaded в случае, когда происходит перенаправление нескольких страниц?Заранее благодарим за любую помощь с вышеуказанным.