9

在用 Java 编写的应用程序测试中尝试使用 remoteWebDriver 设置与 selenium-server-standalone 的连接后,我收到了一个异常。

问题与使用 maven 启动 selenium-server-standalone(使用 Xvfb)的 remoteWebDriver 的使用有关(因为通过不同的会话 Xvfb 手动运行,然后 selenium-server 独立运行,应用程序测试正在运行)。环境由RH Linux R4.1.x、Selenium 2.1、firefox 3.6组成。selenium-server-standalone 和应用程序测试都在同一台机器(虚拟机)上执行。

如前所述,如果此实例由单独的 PUTTY 会话(与用于启动应用程序测试的会话不同)使用以下命令启动,则应用程序测试成功连接到 selenium-server-standalone-2.21.0 实例:

#Xvfb :20 &
#export DISPLAY=:20
#Java –Dwebdriver.firefox.firefox=“/opt/firefox/firefox”  –jar selenium-server-standalone-2-.21.0.jar  -port 4441.

连接到 selenium-server-standalone 的应用程序测试代码如下:

DesiredCapabilities capability = DesiredCapabilities.firefox();
capability.setPlatform(Platform.LINUX);
WebDriver driver = new RemoteWebDriver (new URL("http://127.0.0.1:14444/wd/hub"),capability);
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);

现在尝试在开始应用程序测试之前使用 maven 单独启动 xvfb 和 selenium-server-stand 我收到以下错误(然后在同一个腻子会话中):

selenium server conenction string: http://127.0.0.1:14444/wd/hub
brand community file name orig :/opt/optism_svn/trunk/ITests/Projects/core/bbCampaigns/BrandCommunitiesWD/src/test/resources/Orig_BrandCommunity_Test6386.csv
before connecting to web driver
15:17:05.591 INFO - Executing: [new session: {platform=LINUX, browserName=firefox, version=}] at URL: /session)
15:17:05.651 WARN - Exception thrown
java.util.concurrent.ExecutionException: org.openqa.selenium.WebDriverException: java.lang.reflect.InvocationTargetException
Build info: version: '2.2.1', revision: '16551', time: '2012-04-11 21:42:35'
System info: os.name: 'Linux', os.arch: 'amd64', os.version: '2.6.18-194.el5', java.version: '1.6.0_22'
Driver info: driver.version: unknown
        at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:222)
        at java.util.concurrent.FutureTask.get(FutureTask.java:83)
        at org.openqa.selenium.remote.server.DefaultSession.execute(DefaultSession.java:158)
        at org.openqa.selenium.remote.server.DefaultSession.<init>(DefaultSession.java:112 )
        at org.openqa.selenium.remote.server.DefaultSession.createSession(DefaultSession.java:89)
        at org.openqa.selenium.remote.server.DefaultDriverSessions.newSession(DefaultDriverSessions.java:92)
        at org.openqa.selenium.remote.server.handler.NewSession.handle(NewSession.java:62)
        at org.openqa.selenium.remote.server.rest.ResultConfig.handle(ResultConfig.java:202)
        at org.openqa.selenium.remote.server.DriverServlet.handleRequest(DriverServlet.java:597)
        at org.openqa.selenium.remote.server.DriverServlet.doPost(DriverServlet.java:548)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
        at org.openqa.selenium.remote.server.DriverServlet.service(DriverServlet.java:520)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
        at org.openqa.jetty.jetty.servlet.ServletHolder.handle(ServletHolder.java:428)
        at org.openqa.jetty.jetty.servlet.ServletHandler.dispatch(ServletHandler.java:677)
        at org.openqa.jetty.jetty.servlet.ServletHandler.handle(ServletHandler.java:568)
        at org.openqa.jetty.http.HttpContext.handle(HttpContext.java:1530)
        at org.openqa.jetty.http.HttpContext.handle(HttpContext.java:1482)
        at org.openqa.jetty.http.HttpServer.service(HttpServer.java:909)
        at org.openqa.jetty.http.HttpConnection.service(HttpConnection.java:820)
        at org.openqa.jetty.http.HttpConnection.handleNext(HttpConnection.java:986)
        at org.openqa.jetty.http.HttpConnection.handle(HttpConnection.java:837)
        at org.openqa.jetty.http.SocketListener.handleConnection(SocketListener.java:243)
        at org.openqa.jetty.util.ThreadedServer.handle(ThreadedServer.java:357)
        at org.openqa.jetty.util.ThreadPool$PoolThread.run(ThreadPool.java:534)
Caused by: org.openqa.selenium.WebDriverException: java.lang.reflect.InvocationTargetException
Build info: version: '2.2.1', revision: '16551', time: '2012-04-11 21:42:35'
System info: os.name: 'Linux', os.arch: 'amd64', os.version: '2.6.18-194.el5', java.version: '1.6.0_22'
**Driver info: driver.version: unknown**
        at org.openqa.selenium.remote.server.DefaultDriverFactory.callConstructor(DefaultDriverFactory.java:68)
        at org.openqa.selenium.remote.server.DefaultDriverFactory.newInstance(DefaultDriverFactory.java:52)
        at org.openqa.selenium.remote.server.DefaultSession$BrowserCreator.call(DefaultSession.java:197)
        at org.openqa.selenium.remote.server.DefaultSession$BrowserCreator.call(DefaultSession.java:184)
        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
        at java.util.concurrent.FutureTask.run(FutureTask.java:138)
        at org.openqa.selenium.remote.server.DefaultSession$1.run(DefaultSession.java:151)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
        at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
        at org.openqa.selenium.remote.server.DefaultDriverFactory.callConstructor(DefaultDriverFactory.java:58)
        ... 9 more
**Caused by: java.lang.IllegalStateException: The path to the chromedriver executable must be set by the webdriver.chrome.driver system property**
        at com.google.common.base.Preconditions.checkState(Preconditions.java:172)
        at org.openqa.selenium.chrome.ChromeDriverService.createDefaultService(ChromeDriverService.java:90)
        at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:107)
        ... 14 more
**15:17:05.659 WARN - Exception: The path to the chromedriver executable must be set by the  webdriver.chrome.driver system property**

用于启动 xvfb 和 selenium 服务器的 pom.xml 如下(部分相关 xvfb 和 selenium 的摘录):

<properties>
    <!-- Dependencies -->
    <selenium-version>2.21.0</selenium-version>
<selenium-plugin-version>2.3</selenium-plugin-version>

<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>${selenium-version}</version>
</dependency>

......

<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>selenium-maven-plugin</artifactId>
<version>${selenium-plugin-version}</version>
<configuration>
<background>true</background>
<port>14444</port>
</configuration>
<executions>

<execution>
<id>xvfb</id>
<phase>pre-integration-test</phase>
<goals>
<goal>xvfb</goal>
</goals>
….                      
<execution>
<id>start-selenium-server</id>
<phase>pre-integration-test</phase>
<goals>
<goal>start-server</goal>
</goals>
</execution>
4

2 回答 2

4

我昨天有同样的错误:

 Exception: The path to the chromedriver executable must be set by the  webdriver.chrome.driver system property**

我通过在节点机器的路径中添加 chromedriver.exe 解决了这个问题。(https://code.google.com/p/chromedriver/downloads/list)但是如果尝试启动 Firefox 会出现这个问题很奇怪......

于 2013-03-01T10:30:11.367 回答
0
npm install chromedriver

有同样的问题,这对我有用。

于 2015-11-09T21:54:28.390 回答