我今天尝试了 GhostDriver 和 Phantomjs。当我使用 GhostDriver 时,它运行良好。这样开始
phantomjs --webdriver=8910 然后
new RemoteWebDriver(new URL("http://localhost:8910"), sCaps);
我的硒测试用例可以通过。
然后我尝试使用 Selenium2Grid,所以我启动 selenium 独立服务器作为集线器:
D:\_Try\selenium>java -jar selenium-server-standalone-2.31.0.jar -role hub
2013-3-20 14:13:49 org.openqa.grid.selenium.GridLauncher main
信息: Launching a selenium grid server
2013-03-20 14:13:50.026:INFO:osjs.Server:jetty-7.x.y-SNAPSHOT
2013-03-20 14:13:50.060:INFO:osjsh.ContextHandler:started o.s.j.s.ServletContextHandler{/,null}
2013-03-20 14:13:50.068:INFO:osjs.AbstractConnector:Started SocketConnector@0.0.0.0:4444
然后将 GhostDriver 注册到集线器
C:\Users\administrator>phantomjs --webdriver=8910 --webdriver-selenium-grid-hub=http://localhost:4444
PhantomJS is launching GhostDriver...
Ghost Driver running on port 8910
Registered with grid hub: http://localhost:4444/ (ok)
然后我通过 Grid 控制台检查了注册:http://localhost:4444/grid/console
发现 phantomjs 已经注册了。所以我修改了代码,客户端应该访问网格:
new RemoteWebDriver(new URL("http://localhost:4444"), sCaps);
重新运行 selenium 测试用例,我认为它会运行良好,但抛出异常:
java.lang.ClassCastException: java.lang.String cannot be cast to java.util.Map
at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:218)
at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:111)
at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:129)
at net.pipitest.selenium.trial.ghost.BaseTest.prepareDriver(BaseTest.java:117)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
我调试了代码,发现在RemoteWebDriver.class中,响应是Selenium Grid Page(http://localhost:4444
)的源代码,应该是这样的MAP对象(下面是我直接使用GhostDriver时得到的):[platform=windows -7-32 位,acceptSslCerts=false,javascriptEnabled=true,browserName=phantomjs,rotatable=false,locationContextEnabled=false,版本=phantomjs-1.8.1+ghostdriver-1.0.2,databaseEnabled=false,cssSelectorsEnabled=true,handlesAlerts=false , browserConnectionEnabled=false, webStorageEnabled=false, proxy={proxyType=direct}, nativeEvents=true, applicationCacheEnabled=false, takeScreenshot=false]
有没有人遇到过这个问题?或者有什么建议?提前致谢。