Исключение: пусто при настройке Selenium с использованием ThreadLocal и ChromeDriver (версия 75)? - PullRequest
0 голосов
/ 24 мая 2019

Текущая настройка хранится в моем DriverFactory:

private static ThreadLocal<WebDriver> webDriver = new ThreadLocal<WebDriver>();
return webDriver.get();

В настоящее время кажется, что следующий метод не работает:

public void loadUrl(String url) {
    try {
        getDriver().get(url);
        System.out.println("Successfully navigated to URL: " + url);
    } catch (Exception e) {
        System.out.println(e.getStackTrace());
        Assert.fail("Unable to navigate to URL: " + url + ", Exception: " + e.getMessage());
    }
}

Установить метод драйвера:

 public final void setDriver(String browser) throws Exception {
        String remoteHubUrl = "http://xxx.xxxx.xxx.xxx:4444/wd/hub/";
         try {
            switch (setBrowserType(browser)) {
                 case "grid":
                    DesiredCapabilities capabilities =new DesiredCapabilities();
                    capabilities.setBrowserName("chrome");
                    ChromeOptions op = new ChromeOptions();
                    op.merge(capabilities);
                    webDriver.set(new RemoteWebDriver(new URL(remoteHubUrl), op));
                        break;
                }
}

Сообщение об исключении:

Exception: null

Кажется, нет никаких проблем при использовании более старых версий chromedriver, есть идеи?

Базовый шаг, который используется для инициализации драйвера перед выполнением тестов:

@Before
public void setupHook()  {
    setDriver("grid");
}

1 Ответ

0 голосов
/ 24 мая 2019

Основная проблема, которую я вижу в приведенном выше коде, заключается в том, что вы пытаетесь создать экземпляр RemoteWebDriver, используя объект ChromeOptions вместо объекта DesiredCapabilities.

RemoteWebDriver требует DesiredCapabilities (см. код Selenium здесь ), который ChromeOptions не расширяет и не реализует. Они оба расширяют AbstractCapabilities, поэтому вам, возможно, просто везло в прошлом, но теперь они разошлись настолько, что больше не совместимы.

* EDIT *

Я бы предложил вам обновить код, чтобы сделать это:

switch (setBrowserType(browser)) {
    case "grid":
        DesiredCapabilities capabilities = new DesiredCapabilities();
        capabilities.setBrowserName("chrome");
        webDriver.set(new RemoteWebDriver(new URL(remoteHubUrl),capabilities));
        break;
}
...