Ошибка noSuchMethod: org.openqa.selenium.os.CommandLine.findExecutable(Ljava/lang/String;)Ljava/lang/String; при запуске Chrome с помощью SoapUI

#java #selenium #phantomjs

#google-chrome #селен #заводной #selenium-chromedriver #soapui

Вопрос:

Я пытаюсь запустить сценарии selenium из инструмента SoapUI 5.2.1 со следующим сценарием запуска:

 System.setProperty("webdriver.chrome.driver","D:\SoapUI-5.2.1\bin\ext\chromedriver.exe")
WebDriver driver = new ChromeDriver();
driver.manage().window().maximize();
driver.get("https://www.MyUrl.com")
driver.manage().timeouts().implicitlyWait(120,TimeUnit.SECONDS);
  

Я сохранил следующий файл зависимости selenium в папке SoapUI / bin / ext

— chromedriver 2.36
— selenium-server-standalone-3.4.0.jar
— selenium-chrome-driver-2.3.1.jar

Но я получаю следующее сообщение об ошибке при запуске скрипта.

 Tue May 22 15:51:47 IST 2018:ERROR:java.lang.NoSuchMethodError: org.openqa.selenium.os.CommandLine.findExecutable(Ljava/lang/String;)Ljava/lang/String;
   java.lang.NoSuchMethodError: org.openqa.selenium.os.CommandLine.findExecutable(Ljava/lang/String;)Ljava/lang/String;
    at org.openqa.selenium.chrome.ChromeDriverService.createDefaultService(ChromeDriverService.java:84)
    at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:87)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at org.codehaus.groovy.reflection.CachedConstructor.invoke(CachedConstructor.java:77)
    at org.codehaus.groovy.runtime.callsite.ConstructorSite$ConstructorSiteNoUnwrapNoCoerce.callConstructor(ConstructorSite.java:102)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallConstructor(CallSiteArray.java:57)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.java:182)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.java:186)
    at Script1.launchURL(Script1.groovy:49)
    at Script1.run(Script1.groovy:20)
    at com.eviware.soapui.support.scripting.groovy.SoapUIGroovyScriptEngine.run(SoapUIGroovyScriptEngine.java:92)
    at com.eviware.soapui.impl.wsdl.teststeps.WsdlGroovyScriptTestStep.run(WsdlGroovyScriptTestStep.java:141)
    at com.eviware.soapui.impl.wsdl.panels.teststeps.GroovyScriptStepDesktopPanel$RunAction$1.run(GroovyScriptStepDesktopPanel.java:250)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
  

Кто-нибудь, помогите мне решить эту проблему, поскольку я не могу найти правильное решение в Google.

Спасибо
Карунагара Панди

Ответ №1:

Это сообщение об ошибке…

 java.lang.NoSuchMethodError: org.openqa.selenium.os.CommandLine.findExecutable(Ljava/lang/String;)Ljava/lang/String;
   java.lang.NoSuchMethodError: org.openqa.selenium.os.CommandLine.findExecutable(Ljava/lang/String;)Ljava/lang/String;
  

…подразумевает, что ошибка NoSuchMethodError была вызвана, когда команда операционной findExecutable() системы попыталась найти исполняемый файл в соответствии с вашим System.setProperty() line .

Класс NoSuchMethodError

NoSuchMethodError расширяется IncompatibleClassChangeError и, согласно документам Java, выдается, если приложение пытается вызвать указанный метод класса (статический или экземпляр), и у этого класса больше нет определения этого метода. Обычно эта ошибка перехватывается компилятором, и эта ошибка может возникнуть только во время выполнения, если определение класса несовместимо изменилось. Несовместимое изменение класса происходит из-за изменения определения некоторого класса, от которого зависит текущий выполняемый метод.

Что пошло не так?

Вы создали экземпляр WebDriver, то есть драйвер, и запустили его через ChromeDriver(). Но подкаталог SoapUI/bin/ext содержит несколько определений из selenium-server-standalone-3.4.0.jar и selenium-chrome-driver-2.3.1.jar .

Решение

Выполните следующие действия :

  • Удалить selenium-chrome-driver-2.3.1.jar из подкаталога SoapUI/bin/ext.
  • Обновите JDK до последних уровней JDK 8u171.
  • Обновите Selenium до текущих уровней версии 3.11.0.
  • Обновите ChromeDriver до текущего уровня ChromeDriver версии 2.38.
  • Сохраняйте версию Chrome на уровне Chrome v66.x. (согласно примечаниям к выпуску ChromeDriver версии v2.38)
  • Очистите рабочее пространство вашего проекта с помощью IDE и перестройте свой проект только с необходимыми зависимостями.
  • Используйте инструмент CCleaner, чтобы стереть все проблемы с операционной системой до и после выполнения вашего набора тестов.
  • Если ваша базовая версия веб-клиента слишком старая, удалите ее с помощью программы удаления Revo и установите последнюю стандартную и выпущенную версию веб-клиента.
  • Перезагрузите систему.
  • Выполнить ваш @Test .

Комментарии:

1. Привет, Дебаньян, спасибо за ответ.. Я попробую выполнить эти шаги … 🙂

Ответ №2:

Код для инициализации chromedriver аналогичен приведенному ниже коду

 System.setProperty("webdriver.chrome.driver", "C:\chromedriver_win32\chromedriver.exe");

        Webdriver driver = new ChromeDriver();
  

Вам нужно установить правильный идентификатор артефакта зависимости для selenium, например

 <!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java -->
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-java</artifactId>
        <version>3.12.0</version>
    </dependency>
  

если вы используете jar-файл, загрузите файл selenium jar по этой аутентичной ссылке