автоматизированные тесты терпят неудачу в teamcity, но проходят, когда я запускаю их локально

#typescript #protractor #automated-tests #cucumber #teamcity

#typescript #транспортир #автоматизированные тесты #огурец #teamcity

Вопрос:

Итак, когда я запускаю свой набор автоматизированных тестов локально, все они проходят. Когда я запускаю их через teamcity, 2 теста завершаются неудачей. Я использую cucumber и protractor, а также chai для утверждений. Страница, которую я тестирую, содержит 2 таблицы с элементами в них, и элементы можно выбрать, установив флажок. Функция 2 тестов:

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