#typescript #protractor #automated-tests #cucumber #teamcity
#typescript #транспортир #автоматизированные тесты #огурец #teamcity
Вопрос:
Итак, когда я запускаю свой набор автоматизированных тестов локально, все они проходят. Когда я запускаю их через teamcity, 2 теста завершаются неудачей. Я использую cucumber и protractor, а также chai для утверждений. Страница, которую я тестирую, содержит 2 таблицы с элементами в них, и элементы можно выбрать, установив флажок. Функция 2 тестов:
-
- Если я выбираю 2 элемента на первой странице и перехожу на следующую страницу, выбранные элементы остаются выбранными.
-
- Если я выбираю 50 элементов, я не могу выбрать больше элементов, а остальные флажки отключены.
трассировка стека для сценария 1: (Я просто предоставлю трассировку стека для одного из неудачных тестов, я уверен, что если я смогу найти решение для этого, я найду решение и для другого).
Ошибка времени ожидания: элемент(по(xpath, //table//td[text() = ‘ MyTd22 ‘]/ предыдущий-sibling::td//mat-checkbox)) не найден 23:05:45 Время ожидания истекло после 10004 мс 23:05:45 в C:TeamCityBuildAgentwork9106fcb8518a4d99node_modulesselenium-webdriverlibpromise.js:2201:17 23:05:45 в runMicrotasks () 23:05:45 в processTicksAndRejections (internal/process/task_queues.js:94:5)
Обратите внимание, что это 3-й элемент, который я пытаюсь выбрать на 2-й странице.
И я абсолютно невежественен, как возможно, что эти элементы обнаруживаются, когда я запускаю их локально, в 100% случаев, но никогда, когда я запускаю их в teamcity.
Определение шага:
When(/^I select the '(.*)' application$/, async (applicationName: string) => {
await page.selectApplicationByName(applicationName);
});
Функция:
public async selectApplicationByName(applicationName: string) {
const checkedAttributerName = "my-xpath-selector";
const elementCheckbox = element(by.xpath("//table//td[text() = ' " applicationName " ']/preceding-sibling::td//mat-checkbox"));
await waitForElement(by.xpath("//table//td[text() = ' " applicationName " ']/preceding-sibling::td//mat-checkbox"));
if (await elementCheckbox.getAttribute("class") !== checkedAttributerName) {
await element(by.xpath("//table//td[text() = ' " applicationName " ']")).click();
}
}
То, что я пробовал:
- Я пытался поиграть с командами waitForElement(), но если я их удалю, тесты также завершатся неудачно локально.
- Размещение команд browser.sleep() в разных местах, но это не помогло, и я бы не хотел использовать sleep, если смогу этого избежать
Мои подозрения: функция выглядит как » выберите элемент 1, выберите элемент 2, перейдите на следующую страницу, выберите элемент 3, выберите элемент 4. Тест завершается неудачей на шаге выбора элемента 3, но никогда на элементе выбора 1 или 2. Каждый раз, когда вы переходите на следующую страницу, содержимое таблицы удаляется из dom и загружаются новые элементы. Казалось бы, очень вероятно, что когда я перехожу на следующую страницу, селектор, который я использую для элементов 1 и 2, больше не действителен для элементов 3 и 4. Но тогда, я думаю, я должен получить исключение устаревшего элемента. И не объясняет, почему он работает локально и выходит из строя через teamcity.
Teamity запускает тест на том же сервере, что и мой локальный, я проверил это. Любые предложения будут высоко оценены, если вам нужна дополнительная информация, дайте мне знать, я постараюсь ее предоставить.
Ответ №1:
Для тех, кто интересуется решением, агент, который запускал тест, не использовал тот же windowsize, что и мой локальный запуск, поэтому размер таблиц отличался, и когда я хотел waitForElement(), время ожидания истекло, потому что элемент был на следующей странице.