Selenium 启动headless浏览器时获取错误java.lang.NoSuchMethodError

Selenium 启动headless浏览器时获取错误java.lang.NoSuchMethodError,selenium,selenium-webdriver,phantomjs,Selenium,Selenium Webdriver,Phantomjs,使用Phantomjs启动无头浏览器时,出现以下异常 java.lang.NoSuchMethodError: org.openqa.selenium.os.CommandLine.find(Ljava/lang/String;)Ljava/lang/String; at org.openqa.selenium.phantomjs.PhantomJSDriverService.findPhantomJS(PhantomJSDriverService.java:232) at or

使用Phantomjs启动无头浏览器时,出现以下异常

java.lang.NoSuchMethodError: org.openqa.selenium.os.CommandLine.find(Ljava/lang/String;)Ljava/lang/String;
    at org.openqa.selenium.phantomjs.PhantomJSDriverService.findPhantomJS(PhantomJSDriverService.java:232)
    at org.openqa.selenium.phantomjs.PhantomJSDriverService.createDefaultService(PhantomJSDriverService.java:181)
    at org.openqa.selenium.phantomjs.PhantomJSDriver.<init>(PhantomJSDriver.java:104)
    at org.openqa.selenium.phantomjs.PhantomJSDriver.<init>(PhantomJSDriver.java:94)
更新了完整的跟踪

FAILED CONFIGURATION: @BeforeMethod LaunchBrowser
java.lang.NoSuchMethodError: org.openqa.selenium.os.CommandLine.find(Ljava/lang/String;)Ljava/lang/String;
    at org.openqa.selenium.phantomjs.PhantomJSDriverService.findPhantomJS(PhantomJSDriverService.java:232)
    at org.openqa.selenium.phantomjs.PhantomJSDriverService.createDefaultService(PhantomJSDriverService.java:181)
    at org.openqa.selenium.phantomjs.PhantomJSDriver.<init>(PhantomJSDriver.java:104)
    at org.openqa.selenium.phantomjs.PhantomJSDriver.<init>(PhantomJSDriver.java:94)
    at baseHelper.BrowserLauncher.LaunchBrowser(BrowserLauncher.java:108)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:86)
    at org.testng.internal.Invoker.invokeConfigurationMethod(Invoker.java:514)
    at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:215)
    at org.testng.internal.Invoker.invokeMethod(Invoker.java:589)
    at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:820)
    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1128)
    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:129)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:112)
    at org.testng.TestRunner.privateRun(TestRunner.java:782)
    at org.testng.TestRunner.run(TestRunner.java:632)
    at org.testng.SuiteRunner.runTest(SuiteRunner.java:366)
    at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:361)
    at org.testng.SuiteRunner.privateRun(SuiteRunner.java:319)
    at org.testng.SuiteRunner.run(SuiteRunner.java:268)
    at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
    at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
    at org.testng.TestNG.runSuitesSequentially(TestNG.java:1244)
    at org.testng.TestNG.runSuitesLocally(TestNG.java:1169)
    at org.testng.TestNG.run(TestNG.java:1064)
    at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:113)
    at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:206)
    at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:177)
配置失败:@beforethod LaunchBrowser
java.lang.NoSuchMethodError:org.openqa.selenium.os.CommandLine.find(Ljava/lang/String;)Ljava/lang/String;
位于org.openqa.selenium.phantomjs.PhantomJSDriverService.findPhantomJS(PhantomJSDriverService.java:232)
位于org.openqa.selenium.phantomjs.PhantomJSDriverService.createDefaultService(PhantomJSDriverService.java:181)
位于org.openqa.selenium.phantomjs.PhantomJSDriver(PhantomJSDriver.java:104)
位于org.openqa.selenium.phantomjs.PhantomJSDriver(PhantomJSDriver.java:94)
在baseHelper.BrowserLauncher.LaunchBrowser(BrowserLauncher.java:108)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中
位于java.lang.reflect.Method.invoke(Method.java:497)
位于org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:86)
位于org.testng.internal.Invoker.invokeConfigurationMethod(Invoker.java:514)
位于org.testng.internal.Invoker.invokeConfigulations(Invoker.java:215)
位于org.testng.internal.Invoker.invokeMethod(Invoker.java:589)
位于org.testng.internal.Invoker.invokeTestMethod(Invoker.java:820)
位于org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1128)
位于org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:129)
位于org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:112)
位于org.testng.TestRunner.privateRun(TestRunner.java:782)
位于org.testng.TestRunner.run(TestRunner.java:632)
位于org.testng.SuiteRunner.runTest(SuiteRunner.java:366)
在org.testng.SuiteRunner.runSequential上(SuiteRunner.java:361)
位于org.testng.SuiteRunner.privateRun(SuiteRunner.java:319)
运行(SuiteRunner.java:268)
位于org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
位于org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
在org.testng.testng.runSuitesSequentially上(testng.java:1244)
位于org.testng.testng.runSuitesLocally(testng.java:1169)
位于org.testng.testng.run(testng.java:1064)
位于org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:113)
位于org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:206)
位于org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:177)

以下是您问题的答案:

当我们使用Phantomjs时,我们必须提供Phantomjs可执行文件的绝对路径。在指定实现之前,请记住指定
WebDriver

以下是Windows中的示例:

 File path=new File("C:\\Utility\\phantomjs-2.1.1-windows\\bin\\phantomjs.exe");
 System.setProperty("phantomjs.binary.path",path.getAbsolutePath());
 WebDriver driver= new PhantomJSDriver();
 driver.manage().window().maximize();
 driver.navigate().to("https://www.google.co.in/");
PS:请将其转换为Mac可识别格式

如果这能回答您的问题,请告诉我。

System.setProperty(“phantomjs.binary.path”,src.getAbsolutePath())在phantmjs中不起作用 但是,您可以设置所需的功能并将其传递给PhantomJSDriver

DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability(PhantomJSDriverService.PHANTOMJS_EXECUTABLE_PATH_PROPERTY, System.getProperty("user.dir") + /drivers/phantomjs.exe");

WebDriver driver = new PhantomJSDriver(capabilities);
driver.navigate().to("https://www.google.co.in/");
driver.get("http://google.com");
确保您的pom文件未使用selenium 3.6.0版。相反,使用下面的依赖项

<dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-java</artifactId>
        <version>3.5.3</version>
</dependency>

org.seleniumhq.selenium
硒爪哇
3.5.3
另外,WebDriver=newphantomjsdriver();将始终导致错误,因此不能使用空构造函数


我希望这有帮助。

你能考虑更新我们关于你试图使用<代码>幻像> <代码>的平台吗?初始化Phantomjs驱动程序后,请尝试导航到url。如果您看到任何错误,请考虑提供完整的StAcTrack进行进一步分析。Thanks@DebanjanB操作系统是mac。由于我想使用无头浏览器,我正在考虑phantomjs。将phantomjs驱动程序分配给webdriver变量时出现此错误。要导航到URL,驱动程序变量应该有一个值,但为phantomjs驱动程序分配了null。如果我使用firefox驱动程序,测试会顺利运行。请验证文件(src)是否存在?@Eugene是文件是否存在请尝试打印路径以确保该路径指向目录?否,
WebDriver driver=new PhantomJSDriver()这将为driverit已经转换的
文件src=新文件(“src/test/resources/phantomjs_mac”)提供空值我已经把它放在Project DealTry:你能考虑更新当前的代码块和完整的错误StAcTrack吗?Thanks@NagarjunaReddy将其保存在项目目录中不是强制性的,您可以将其保存在系统中的任何位置,但提供绝对路径。谢谢,因为这将是方便的,我已经把司机留在项目内。已更新问题中的完整堆栈跟踪
<dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-java</artifactId>
        <version>3.5.3</version>
</dependency>