Не удается запустить тесты в режиме Chrome без головы - PullRequest
0 голосов
/ 21 марта 2019

Я пытаюсь запустить тесты в режиме без головы Chrome, но получаю java.lang.NullPointerException

Chrome версия: версия 72.0.3626.121 (официальная сборка) (64-разрядная версия)
Версия Selenium: 3.8.1
Версия Chromedriver: 2.45.615355

Вот мой BaseTest:

public abstract class BaseTest {

public WebDriver driver;

protected abstract String getUrl();

@Before
public void setUp() {
    Log.startLog("Test is Starting...");
    System.setProperty("webdriver.chrome.driver", "src//test//resources//chromedriver");
    ChromeOptions chromeOptions = new ChromeOptions();
    chromeOptions.setHeadless(true);
    WebDriver driver = new ChromeDriver(chromeOptions);
    driver.manage().timeouts().pageLoadTimeout(20, TimeUnit.SECONDS);
    driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
    driver.get(getUrl());
}

@After
public void tearDown() {
    Log.endLog("Test is Ending...");
    driver.manage().deleteAllCookies();
    driver.close();
}
}

Когда я запускаю тесты, не в режиме без головы, каждый тест работает хорошо, но в режиме без головы, я даже не могу запустить простой тест, чтобы понять, работает ли режим без головы.

Тестовый пример:
@Test public void test() { System.out.println(driver.getTitle()); }

Пример URL: https://www.wikipedia.org/

UPDATE: Я создал новый пример проекта с этим кодом:

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;

public class test {

public static void main(String[] args) {

    System.setProperty("webdriver.chrome.driver", "/Users/alexsomov/Desktop/chromedriver2");

    //Set Chrome Headless mode as TRUE
    ChromeOptions options = new ChromeOptions();
    options.setHeadless(true);

    //Instantiate Web Driver
    WebDriver driver = new ChromeDriver(options);
    driver.get("https://www.google.com/");
    System.out.println("Page title is - " + driver.getTitle());

    driver.close();
}

И, бинго, все работает хорошо ... Нужно выяснить, почему код выше из реального проекта не работает, кажется, что-то не так с классом BaseTest, и когда я запускаю код с отладчиком, я получаю driver == null , может у кого-нибудь есть решение, как мне решить эту проблему: /

ОТВЕТ Решение было очень простым, просто нужно изменить 1 строку в методе setUp () класса BaseTest.

Вот этот:

WebDriver driver = new ChromeDriver(chromeOptions);

изменить на это:

driver = new ChromeDriver(chromeOptions);

и все будет работать.

Ответы [ 2 ]

0 голосов
/ 21 марта 2019

ОТВЕТ. Решение было очень простым, просто нужно изменить 1 строку в методе setUp () класса BaseTest.

Этот:

WebDriver driver = new ChromeDriver(chromeOptions);

изменить на это:

driver = new ChromeDriver(chromeOptions);

и все будет работать.

0 голосов
/ 21 марта 2019

Если вы используете Linux, возможно, вам придется добавить --no-sandbox, а также определенные настройки размера окна.--no-sandbox не нужен в Windows, если вы правильно установили пользовательский контейнер.

disable-gpu Только в Windows.Другие платформы больше не требуют этого.Флаг --disable-gpu - временное решение для нескольких ошибок.

if(browser.equalsIgnoreCase("HLChrome")){
            //Headless chrome browser and configure
            WebDriverManager.chromedriver().setup();
            ChromeOptions chromeOptions = new ChromeOptions();
            chromeOptions.addArguments("--no-sandbox");
            chromeOptions.addArguments("--headless");
            chromeOptions.addArguments("disable-gpu");
//            chromeOptions.addArguments("window-size=1400,2100"); // linux should be activate
            driver = new ChromeDriver(chromeOptions);
...