如何将PhantomJS路径传递到Selenium Grid [英] How to pass PhantomJS path to Selenium Grid
问题描述
尝试在Selenium Grid上设置phantomjs节点时出现错误(
I'm getting an error when trying to set up a phantomjs node on Selenium Grid (https://wiki.jenkins-ci.org/display/JENKINS/Selenium+Plugin)
我已经设置了以下自定义json配置:
I've set up the following custom json configuration:
{
"capabilities": [
{
"browserName": "phantomjs",
"phantomjs.binary.path": "/usr/bin/phantomjs",
"platform": "LINUX",
"maxInstances": 5
}
],
"configuration": {
"nodeTimeout":120,
"port":5555,
"hubPort":4444,
"hubHost":"localhost",
"nodePolling":2000,
"registerCycle":10000,
"register":true,
"cleanUpCycle":2000,
"timeout":30000,
"maxSession":1
}
}
但是当我对它运行webdriver时出现错误:
But I get an error when I run webdriver against it:
WebDriverException: Message: The path to the driver executable must be set by the phantomjs.binary.path capability/system property/PATH variable; for more information, see https://github.com/ariya/phantomjs/wiki. The latest version can be downloaded from http://phantomjs.org/download.html
Stacktrace:
at com.google.common.base.Preconditions.checkState (Preconditions.java:199)
at org.openqa.selenium.phantomjs.PhantomJSDriverService.findPhantomJS (PhantomJSDriverService.java:236)
at org.openqa.selenium.phantomjs.PhantomJSDriverService.createDefaultService (PhantomJSDriverService.java:181)
at org.openqa.selenium.phantomjs.PhantomJSDriver.<init> (PhantomJSDriver.java:104)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0 (NativeConstructorAccessorImpl.java:-2)
at sun.reflect.NativeConstructorAccessorImpl.newInstance (NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance (DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance (Constructor.java:526)
at org.openqa.selenium.remote.server.DefaultDriverProvider.callConstructor (DefaultDriverProvider.java:103)
at org.openqa.selenium.remote.server.DefaultDriverProvider.newInstance (DefaultDriverProvider.java:97)
at org.openqa.selenium.remote.server.DefaultDriverFactory.newInstance (DefaultDriverFactory.java:60)
at org.openqa.selenium.remote.server.DefaultSession$BrowserCreator.call (DefaultSession.java:222)
at org.openqa.selenium.remote.server.DefaultSession$BrowserCreator.call (DefaultSession.java:1)
at java.util.concurrent.FutureTask.run (FutureTask.java:262)
at org.openqa.selenium.remote.server.DefaultSession$1.run (DefaultSession.java:176)
at java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:615)
at java.lang.Thread.run (Thread.java:745)
-------------------- >> begin captured logging << --------------------
selenium.webdriver.remote.remote_connection: DEBUG: POST http://127.0.0.1:4444/wd/hub/session {"desiredCapabilities": {"browserName": "phantomjs"}}
selenium.webdriver.remote.remote_connection: DEBUG: Finished Request
如果我停止由插件启动的节点(并保持插件集线器运行),并按如下所示手动运行我自己的节点,则效果很好:
If I stop the node started by the plugin (and keep the plugin hub running), and manually run my own node as follows, it works fine:
java -jar selenium-server-standalone-2.53.0.jar -role webdriver
-browser browserName=phantomjs,platform=LINUX
-hub http://localhost:4444/grid/register
[edit] phantomjs可从Shell执行,并位于/usr/bin/phantomjs:
[edit] phantomjs is executable from the shell and lives at /usr/bin/phantomjs:
$ whereis phantomjs
phantomjs: /usr/bin/phantomjs
我在网上找不到phantomjs设置的规范描述,这不是该插件提供的默认浏览器选项之一.
I can't find a canonical description online of a phantomjs setup and this isn't one of the default browser options provided by the plugin.
上述问题是/usr/bin/phantomjs
上的操作系统权限;我需要对它进行chmod a+x
.
The problem with the above was the OS permissions on /usr/bin/phantomjs
; I needed to do chmod a+x
on it.
乐意添加此附加问题
此方法有效(由我手动启动):
This works (manually started by me):
/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.111.x86_64/jre/bin/java -jar /var/lib/jenkins/selenium-server-standalone-2.53.0.jar -role webdriver -browser browserName=phantomjs,platform=LINUX -hub http://localhost:4444/grid/register
这不是(该过程由selenium插件启动):
This doesn't (the process started by the selenium plugin):
/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.111.x86_64/jre/bin/java -cp /var/cache/jenkins/war/WEB-INF/lib/remoting-2.56.jar hudson.remoting.Launcher -cp /var/lib/jenkins/selenium-server-standalone-2.53.0.jar:/var/lib/jenkins/htmlunit-driver-standalone-2.20.jar -connectTo localhost:36322
运行测试时出现错误:
PHPUnit_Extensions_Selenium2TestCase_WebDriverException: The process has not exited yet therefore no result is available
Error I'm getting when running the test:
PHPUnit_Extensions_Selenium2TestCase_WebDriverException: The process has not exited yet therefore no result is available
推荐答案
添加答案,以防万一有人错过评论.
Adding the answer just in case someone misses the comment.
请检查phantomjs是否对所有用户都具有"x"(执行)访问权限.如果不是,则使用命令更改访问权限.
Please check if phantomjs has 'x' (execute) access for all users. If it doesnt, then use the command to change the access.
chmod +x /usr/bin/phantomjs
新错误该过程尚未退出,因此没有结果可用"主要是硒/驱动程序版本不匹配.您可以尝试降级硒的版本.
The new error "The process has not exited yet therefore no result is available" mostly comes with selenium/driver version mismatch. You could try downgrading the version of selenium.
顺便说一句,您正在使用什么版本的phantomjs.
Btw, what version of phantomjs are you using.
这篇关于如何将PhantomJS路径传递到Selenium Grid的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!