Selenium – Часть элементов нижнего колонтитула страницы недоступна при выполнении в CI/CD

Вопрос или проблема

Иконки социальных сетей отсутствуют на странице. А также все под заголовком ‘О нас’. Пытался добавить Thread.sleep на пять секунд, это тоже не помогло.

Ссылка на сайт: https://excurr.io/#/home

Изображение из CI/CD запуска

Кто-нибудь знает возможные решения или предложения?

Метод:

    public boolean isFacebookIconClickable() {
    baseTest.scrollToTheBottomOfThePage();
    try {
        Thread.sleep(5000);
    } catch (InterruptedException e) {
        throw new RuntimeException(e);
    }
    return baseTest.isClickable(FACEBOOK_ICON);
}

Ответ или решение

Проблема, с которой вы столкнулись, связана с тем, что некоторые элементы в нижней части страницы (например, социальные иконки и информация под заголовком "About") не отображаются корректно при запуске тестов Selenium в CI/CD среде. Ниже приведены шаги и рекомендации для устранения данной проблемы.

Возможные причины отсутствия элементов

  1. Асинхронная загрузка элементов: Возможно, элементы загружаются асинхронно, и ваш код пытается их найти до того, как они появятся на странице.

  2. Различия в окружении: Убедитесь, что окружение CI/CD аналогично вашему локальному окружению. Возможно, есть различия в конфигурации браузера или в самом сервере.

  3. Визуальные эффекты или анимации: Также стоит проверить, нет ли каких-либо CSS-анимаций, которые могут мешать отображению элементов.

Рекомендации по исправлению

  1. Исключение Thread.sleep(): Использование Thread.sleep() может быть неэффективным, поскольку время ожидания может варьироваться. Вместо этого используйте явные ожидания.
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

public boolean isFacebookIconClickable() {
    baseTest.scrollToTheBottomOfThePage();

    WebDriverWait wait = new WebDriverWait(baseTest.getDriver(), 10);
    wait.until(ExpectedConditions.elementToBeClickable(FACEBOOK_ICON)); // Явное ожидание

    return baseTest.isClickable(FACEBOOK_ICON);
}
  1. Проверка наличия элементов: Убедитесь, что элементы действительно присутствуют на странице. Для этого можно использовать ExpectedConditions для проверки их видимости.
public boolean isSocialIconsVisible() {
    WebDriverWait wait = new WebDriverWait(baseTest.getDriver(), 10);
    return wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("css-селектор-для-иконок"))).isDisplayed();
}
  1. Логирование и отладка: Добавьте логирование, чтобы видеть, на каком этапе теста пропадают элементы. Это может помочь в диагностике проблемы.

  2. Рассмотрите использование Headless режима: Если вы используете headless браузер в CI/CD, убедитесь, что интерфейс реалистично имитируется. Некоторые элементы могут не загружаться в headless режиме, так как они требуют пользовательского взаимодействия.

Заключение

Проблема с отсутствующими элементами может возникать по различным причинам, включая асинхронную загрузку контента и разницу в окружении. Используя явные ожидания и логирование, вы сможете более точно определить причину и устранить ее. Если указанные решения не помогают, возможно стоит проверить настройки вашего CI/CD окружения и убедиться, что все зависимости и конфигурации настроены корректно.

Оцените материал
Добавить комментарий

Капча загружается...