Удаленка для jenkins+selenide+selenoid+allure+docker спецов на 2-3 часа в день. 100% remote! Присоединиться к проекту

Headless Chrome + Java + Selenide + MVN = despair

mvn
chrome
java
selenide
Теги: #<Tag:0x00007fedbc6aaf20> #<Tag:0x00007fedbc6aade0> #<Tag:0x00007fedbc6aaca0> #<Tag:0x00007fedbc6aab38>

(Pavel Ozerov) #1

Добрый день!

Специалисты по Selenide, используете ли вы в своих проектах возможность нативного headless тестирования в Chrome? Я столкнулся с проблемой, что не могу заставить maven запустить тесты в headless режиме. Пытался так:

mvn test -Dchromeoptions.args="--headless --disble-gpu"

И так:

mvn test -Dchromeoptions.args=headless

И даже вот так:

mvn test -Dselenide.headless=true

Каждый из вариантов все равно запускает браузер. Инстансы определяются вот этим классом:

Summary

https://github.com/sant0ku/selenide-helpers/blob/master/WindowManager.java

Подскажите, что я делаю не так. Гугл спрашивал, но я так понимаю, еще мало кто юзает эту фичу на данный момент.


Headless Chrome + Java + Selenide + MVN = despair Vol. 2
(asolntsev) #2

Попробуйте такой вариант (без options, всё проще):

Configuration.headless = true;


(Pavel Ozerov) #3

К сожалению, не сработало. Правильно ли я понимаю, что эта опция доступна только начиная с Selenide 4.8? Я использую версию 4.5. Но вероятно я не правильно понял, куда нужно вставить этот код:

Configuration.headless = true;

Когда я делаю import com.codeborne.selenide.Configuration; headless мне не доступен.

При запуске maven с таким флагом - вываливается ошибка. Я полагаю, что через maven правильный запуск был бы:

-Dselenide.headless=true

Однако, это тоже не работает.


(asolntsev) #4

Да, эта фича появилась только в последних версиях Selenide. И селениума. Так что да, в версии 4.5 это и не должно работать.


(Pavel Ozerov) #5

Увы, не получилось. Обновил Selenide до версии 4.8

> <dependency>
>   <groupId>com.codeborne</groupId>
>   <artifactId>selenide</artifactId>
>   <version>4.8</version>
>   <scope>test</scope>
> </dependency>

Вставил перед началом теста:

Configuration.headless = true;

И при запуске теста (не важно, через maven или напрямую через IDE) - все равно стартует браузер. Ошибок не выдает, не подскажите, в какую еще сторону можно копнуть?


(Fiodar Motin) #6

В сторону версии драйвера, а лучше скинуть участок кода куда вставили headless = true


(SergejsA) #7

Класс из моего проекта где я использую хэдлесс хром, может вам подаст идею. Правда тут используется Selenide, но он под капотом все равно Selenium использует.

import com.codeborne.selenide.WebDriverProvider
import io.github.bonigarcia.wdm.ChromeDriverManager
import org.openqa.selenium.WebDriver
import org.openqa.selenium.chrome.ChromeDriver
import org.openqa.selenium.chrome.ChromeOptions
import org.openqa.selenium.remote.DesiredCapabilities

class HeadlessChromeWebDriverProvider implements WebDriverProvider {

@Override
WebDriver createDriver(DesiredCapabilities desiredCapabilities) {

    ChromeOptions chromeOptions = new ChromeOptions()
    chromeOptions.addArguments('--headless')
    chromeOptions.addArguments('--window-size=1920,1080')

    ChromeDriverManager.getInstance().version("2.32").setup()
    WebDriver driver = new ChromeDriver(chromeOptions)

    driver
}

}


(Остап Олексин) #8

Проверьте еще версии браузера, хедлесс режим работает в хроме версии 59+ и фф 56+


(Pavel Ozerov) #9

ChromeDriver 2.34.522932 (4140ab217e1ca1bec0c4b4d1b148f3361eb3a03e)

Что касается теста:

@Test
public void testMethodName() {
    Configuration.headless = true;
    ...
    }

Импорт также сделан:

import com.codeborne.selenide.Configuration;


(Pavel Ozerov) #10

Спасибо! Подумаю, как можно это применить у себя. У вас в таком виде все запускается корректно, верно?


(Pavel Ozerov) #11

Версия хрома:

Version 63.0.3239.84 (Official Build) (64-bit)

ФФ не использую.


(Fiodar Motin) #12

Вот тоже рабочий пример на селениде

@BeforeClass
    public void setUp() {
    System.setProperty("webdriver.gecko.driver", "src\\main\\resources\\geckodriver.exe");
    System.setProperty("webdriver.chrome.driver", "src\\main\\resources\\chromedriver.exe");
    System.setProperty("webdriver.ie.driver", "src\\main\\resources\\IEDriverServer.exe");
    Configuration.browser = "chrome";
    Configuration.headless = mode;
    Configuration.timeout = "4000";
    Configuration.baseUrl = "http://localhost:8080";
    Configuration.startMaximized = true;
    }

(Pavel Ozerov) #13

Спасибо! Полагаю, что проблема в том, что я не задаю в явном виде нигде никаких properties/options для хрома. Либо весь фокус вот в этой строчке:

Configuration.startMaximized = true;

Буду думать дальше :slight_smile:


(SergejsA) #14

Ну конкретно в этом случае это просто имплементация моего кастомного вебдрайвера, можете попробовать создать такой-же класс только подправив под джаву и запустить вместе с "-Dselenide.browser=(путь к классу).HeadlessChromeWebDriverProvider.
И кстати я тоже корячился сначала запустить хэдлесс хром через Selenide configuration и у меня ничего толкового не вышло, в итоге я решил таки сделать кастомный вебдрайвер и все работает.