Selenium 3.141.59 с java в красной шляпе 7.7 не может создать новый chrome драйвер - PullRequest
0 голосов
/ 08 мая 2020

Получение следующего сообщения об ошибке: Не удалось отправить обработчик; вложенное исключение: java .lang.NoSuchMethodError: com.google.common.base.Preconditions.checkState (ZLjava / lang / String; Ljava / lang / Object; Ljava / lang / Object; Ljava / lang / Object;) V

Тот же код хорошо работает в моем локальном ma c, но когда он развернут в Red Hat, он не может создать драйвер chrome.

зависимости селена в pom xml

<!-- Selenium Driver Dependencies-->
<dependency>
    <groupId>org.seleniumhq.selenium</groupId>
    <artifactId>selenium-chrome-driver</artifactId>
    <version>3.141.59</version>
</dependency>
<dependency>
    <groupId>org.seleniumhq.selenium</groupId>
    <artifactId>htmlunit-driver</artifactId>
    <version>2.33.2</version>
</dependency>
<dependency>
    <groupId>com.google.api-client</groupId>
    <artifactId>google-api-client</artifactId>
    <version>1.28.0</version>
</dependency>
<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>23.0</version>
</dependency>

Это метод, который получает драйвер chrome:

import org.openqa.selenium.*;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import javax.annotation.PostConstruct;
import java.util.concurrent.TimeUnit;


@PostConstruct
public void setChromDriverLocation(){
    System.setProperty("webdriver.chrome.driver", this.chromeDriverLocation);
}

public WebDriver getChromeDriver(Long timeoutInSeconds){
    this.LOGGER.info(String.format("Preparing to retrieve chrome driver %s", this.chromeDriverLocation));
    ChromeOptions options = new ChromeOptions();
    options.addArguments("headless");
    options.addArguments("disable-gpu");
    if(StringUtils.hasText(this.chromeBinaryPath)){
        this.LOGGER.info(String.format("Setting binary path %s", this.chromeBinaryPath));
        options.setBinary(this.chromeBinaryPath);
    }
    this.LOGGER.info("Getting chrome driver");
    WebDriver chromeDriver = new ChromeDriver(options);
    chromeDriver.manage().timeouts().implicitlyWait(timeoutInSeconds, TimeUnit.SECONDS);
    this.LOGGER.info("Successfully retrieved chrome driver");
    return chromeDriver;
}

Он не работает в следующей строке: WebDriver chromeDriver = new ChromeDriver (options);

google-chrome версия: Google Chrome 81.0.4044.138 и драйвер chrome для той же версии установлены.

драйвер chrome работает нормально, а

Пожалуйста, дайте мне знать любых решений или отсутствующих зависимостей.

1 Ответ

0 голосов
/ 17 мая 2020

На случай, если у кого-то похожая проблема. Проблема заключалась в том, что старая библиотека google guava была настроена в $ PATH на сервере, что вызвало проблему, упомянутую выше.

<!-- https://mvnrepository.com/artifact/com.google.guava/guava -->
<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>14.0</version>
</dependency>

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

<!-- Selenium Driver Dependencies-->
<dependency>
    <groupId>org.seleniumhq.selenium</groupId>
    <artifactId>selenium-chrome-driver</artifactId>
    <version>3.141.59</version>
</dependency>
<dependency>
    <groupId>org.seleniumhq.selenium</groupId>
    <artifactId>selenium-server</artifactId>
    <version>3.141.59</version>
</dependency>

В случае, если у кого-то еще есть вышеуказанная проблема, проверьте свой путь к классам на предмет проблем с зависимостями и убедитесь, что старые библиотеки google guave не являются частью вашего пути к классам.

...