首页 > 解决方案 > NoSuchMethodError: org.openqa.selenium.os.CommandLine.findExecutable(Ljava/lang/String;)Ljava/lang/String; 使用 SoapUI 启动 Chrome 时

问题描述

我正在尝试使用以下启动脚本从 SoapUI 5.2.1 工具启动 selenium 脚本:

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);

我在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 中找到正确的解决方案。

谢谢卡鲁纳加拉
潘迪

标签: google-chromeseleniumgroovyselenium-chromedriversoapui

解决方案


此错误消息...

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;

...意味着当os命令findExecutable()尝试根据您的System.setProperty() line.

班级NoSuchMethodError

NoSuchMethodErrorextendsIncompatibleClassChangeError并且根据Java Docs,如果应用程序尝试调用类的指定方法(静态或实例),并且该类不再具有该方法的定义,则会抛出它。通常,编译器会捕获此错误,并且如果类的定义发生了不兼容的更改,则此错误只会在运行时发生。不兼容的类更改是由于当前执行的方法所依赖的某个类的定义发生更改而发生的。

什么地方出了错?

您已经创建了WebDriver实例,即驱动程序并通过ChromeDriver()进行了投射。但是SoapUI/bin/ext子目录包含来自selenium-server-standalone-3.4.0.jarselenium-chrome-driver-2.3.1.jar 的多个定义

解决方案

执行以下步骤:

  • SoapUI/bin/ext子目录中删除selenium-chrome-driver-2.3.1.jar 。
  • 将JDK升级到最新级别JDK 8u171
  • 将Selenium升级到当前级别Version 3.11.0
  • 将ChromeDriver升级到当前的ChromeDriver v2.38级别。
  • 将Chrome版本保持在Chrome v66.x级别。(根据 ChromeDriver v2.38 发行说明
  • 通过IDE清理项目工作区并仅使用所需的依赖项重建项目。
  • 使用CCleaner工具在执行测试套件之前和之后清除所有操作系统杂务。
  • 如果您的基本Web 客户端版本太旧,请通过Revo Uninstaller卸载它并安装最新的 GA 和发布版本的Web 客户端
  • 重新启动系统
  • 执行你的@Test.

推荐阅读