Исключение при запуске ChromeDriver с WebDriverManager в проекте maven

Я получаю исключение при попытке открыть ChromeDriver с помощью WebDriverManager в проекте Maven.

Структура, которую я планирую, имеет тенденцию извлекать ChromeDriver из WebDriverManager после добавления зависимости в pom.xml и предназначена для использования Gauge для выполнения тестов.

Ошибка возникает в тот момент, когда он пытается создать новый экземпляр для ChromeDriver при запуске тестов.

Вот исключение:

 Error Message: java.lang.NoSuchMethodError: com.google.common.util.concurrent.SimpleTimeLimiter.create(Ljava/util/concurrent/ExecutorService;)Lcom/google/common/util/concurrent/SimpleTimeLimiter;
  Stacktrace: 
  org.openqa.selenium.net.UrlChecker.<init>(UrlChecker.java:64)
  org.openqa.selenium.remote.service.DriverService.waitUntilAvailable(DriverService.java:187)
  org.openqa.selenium.remote.service.DriverService.start(DriverService.java:178)
  org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:78)
  org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:646)
  org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:255)
  org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:237)
  org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:138)
  org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:178)
  org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:167)
  org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:124)
  StepTests.setupTest(StepTests.java:26)
  sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
  sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
  java.lang.reflect.Method.invoke(Unknown Source)
  com.thoughtworks.gauge.execution.MethodExecutor.execute(MethodExecutor.java:38)
  com.thoughtworks.gauge.execution.HooksExecutor$TaggedHookExecutor.executeHook(HooksExecutor.java:102)
  com.thoughtworks.gauge.execution.HooksExecutor$TaggedHookExecutor.execute(HooksExecutor.java:88)
  com.thoughtworks.gauge.execution.HooksExecutor.execute(HooksExecutor.java:45)
  com.thoughtworks.gauge.processor.MethodExecutionMessageProcessor.executeHooks(MethodExecutionMessageProcessor.java:65)
  com.thoughtworks.gauge.processor.SpecExecutionStartingProcessor.process(SpecExecutionStartingProcessor.java:32)
  com.thoughtworks.gauge.connection.MessageDispatcher.dispatchMessages(MessageDispatcher.java:89)
  com.thoughtworks.gauge.GaugeRuntime.dispatchMessages(GaugeRuntime.java:104)
  com.thoughtworks.gauge.GaugeRuntime.access$100(GaugeRuntime.java:36)
  com.thoughtworks.gauge.GaugeRuntime$2.run(GaugeRuntime.java:85)
  java.lang.Thread.run(Unknown Source)

При запуске этого кода:

import com.thoughtworks.gauge.*;
import io.github.bonigarcia.wdm.ChromeDriverManager;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import com.thoughtworks.gauge.Step;
import static org.junit.Assert.assertEquals;


public class StepTests {
//Holds the WebDriver instance
private WebDriver webDriver;

@BeforeSuite
public static void initializeDriver(){
    ChromeDriverManager.getInstance().setup();
}

@BeforeSpec
public void setupTest(){
    webDriver = new ChromeDriver();
}

--test code--



    @AfterSuite
    public void closeDriver(){
        if (webDriver != null) {
            webDriver.quit();
        }
    }
}

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


person Travsam    schedule 14.09.2017    source источник


Ответы (3)


У вас конфликт версий в Гуаве. Selenium WebDriver (не WebDriverManager) транзитивно зависит от данной версии Guava, и, похоже, вы используете другую версию в своем проекте. Я бы использовал последние версии обоих.

person Boni García    schedule 15.09.2017
comment
Текущая версия Guava — guava-21.0.jar, если это поможет. - person Travsam; 15.09.2017
comment
Есть ли обходной путь, который я бы сделал тем временем? Заранее спасибо. - person Travsam; 18.09.2017

Да, у меня работает после добавления зависимости от гуавы:

<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>27.0.1-jre</version>
</dependency>
person rohit_JAPY    schedule 19.02.2019

1-е возможное решение

2-е возможное решение

Используйте этот ответ только в том случае, если проблема не устранена с помощью первого решения.

Я столкнулся с этой проблемой и не нашел принятых ответов на SO. Я понял это, прочитав его по ссылке, отличной от SO, и вставив ее сюда для будущих ссылок.

Сначала нам нужно точно определить проблему.

Если вы используете IntelliJ или Eclipse, вам нужно перейти к настройкам запуска/отладки и добавить аргумент виртуальной машины,

-ea -verbose:class

Теперь повторно запустите свой тест. Это начнет распечатывать классы и банки, из которых эти классы импортируются и используются. В вашем конкретном случае, если вы ищете SimpleTimeLimiter, вы увидите пакет, из которого он импортирован.

Так как произошел конфликт версий пакетов, возникла эта ошибка. Одна зависимость jar будет ссылаться на более раннюю версию guava, и этот jar будет присутствовать в начале пути к классам. Это позволит избежать использования предполагаемого пути к классу. Чтобы быть более точным, должен быть какой-то пакет, который импортирует guava раньше, чем тот, который вы написали в своем pom.xml. .

Как это возможно?

Предположим, ваш проект импортирует пакеты dog-2.0.jar и animal-2.0.jar. Возможно, вы не знаете, что dog-2.0.jar внутренне импортирует animal-1.0.jar. Итак, из-за этой зависимости импорта JVM будет импортировать класс с именем Animal.class, который будет исходить из animal-1.0.jar вместо Animal. класс, который вы / ваш проект ожидаете от animal-2.0.jar.

А потом?

JVM получит ссылку на Animal.class даже до того, как она достигнет предполагаемого импорта animal-2.0.jar. Следовательно, порядок, в котором импортируются файлы jar (путь к классу), непреднамеренно испортит эту транзитивную зависимость.

Что я могу сделать?

Вы можете щелкнуть правой кнопкой мыши свой проект в INtelliJ и что-то подобное для Eclipse. Нажмите на

Open Module Settings -> Click on Dependencies

Здесь вы получите список импортируемых банок. Вы можете изменить порядок банок. Вы можете поместить dog-2.0.jar прямо под зависимостью animal-2.0.jar. Это решит проблему.

person Siddhartha    schedule 16.09.2020