Headless Chrome + Java + Selenide + MVN = despair Vol. 2

mvn
chrome
selenide
java
Теги: #<Tag:0x00007fedbbd73b28> #<Tag:0x00007fedbbd73308> #<Tag:0x00007fedbbd72b60> #<Tag:0x00007fedbbd72250>

(Pavel Ozerov) #1

Добрый день!

Продолжая предыдущую тему (Headless Chrome + Java + Selenide + MVN = despair), хотелось бы поделиться простым решением запуска тестов в Headless Chrome режиме,- вдруг кому-то пригодится:

ChromeOptions chromeOptions_windowOne = new ChromeOptions();
chromeOptions_windowOne.setHeadless(true);
chromeOptions_windowOne.addArguments("window-size=1249,1248");
chromeOptions_windowOne.setAcceptInsecureCerts(true);
...
WebDriver windowOne = new ChromeDriver(chromeOptions_windowOne);

Однако, теперь возникла другая проблема. Тесты корректно запускаются и выполняются на CI (TeamCity), но в какой-то момент (рандомно) они начинают падать (иногда один за другим, иногда в разном порядке). Происходит это всегда при вызове одного и того же метода (все селекторы в классе объявлены как private static final SOME_NAME):

public static void login(String email, String password) {
    FIELD_EMAIL.waitUntil(visible, 30000).clear();
    FIELD_EMAIL.waitUntil(visible, 30000).sendKeys(email);
    FIELD_PASSWORD.waitUntil(visible, 30000).clear();
    FIELD_PASSWORD.waitUntil(visible, 30000).sendKeys(password);
    BUTTON_LOGIN.waitUntil(visible, 30000).click();

    //Wait until top menu is loaded
    TopMenu.waitUntilBrandIsVisible();
}

Ошибка выглядит так:

Element not found {[x-tid=email]}
Expected: visible

x-tid - это кастомный атрибут в html для поля email. Если посмотреть на скриншот страницы в момент, когда тест упал, то видно, что страница не загрузилась (белый экран). Однако, если прогонять единственный тест раз за разом, то он работает стабильно и падений не наблюдается (проблемы возникают только тогда, когда все тесты выполняются скопом - класс за классом). В связи с этим вопросы:

  1. Сталкивался ли кто-нибудь с подобным? В чем может быть причина?
  2. Есть ли в Selenide или Java какой-нибудь нативный метод, который позволил бы дождаться реальной загрузки страницы, определить, что она загрузилась и перезагрузить ее, если этого не произошло?

Спасибо!


(Vladislav Kulasov) #2

Я сталкивался, но не в Headless. Если у вас тест упал по “Element not found” это говорит что страница загрузилась, иначе там другая ошибка. Попробуйте включить логи хрома и проанализировать. Так же полезно забирать логи из консоли. Возможно у вас скрипт падает, вот и нет отрисовки.
Можете орентироваться на какой то элемент на странице и если его нет перегружать, но это не красиво. Ищите проблему.


(Pavel Ozerov) #3

Спасибо! Похоже, разобрался. Проблема была действительно в скрипте.