在phantomjs中似乎存在ghostdriver的问题,当点击按钮后HTTP调用失败时,整个事情都会失败。
https://github.com/detro/ghostdriver/issues/202#issuecomment-19808784
问题已修复,位于主分支中。有关如何引用新文件的说明,而不是使用phantomjs中包含的ghostdriver。
Java在这里: https://github.com/detro/ghostdriver/issues/243
并且似乎有值
PhantomJSDriverService.PHANTOMJS_EXECUTABLE_PATH_PROPERTY
但在C#
中并不存在所以试过了
var opts = new PhantomJSOptions();
opts.AddAdditionalCapability("phantomjs.ghostdriver.path.property", "c:\\path\\src\\main.js");
但是没有,phantomjs中的输出仍然显示旧版本
EDIT1: 这与phantomJS的路径不同,可以设置为
PhantomJSDriverService.CreateDefaultService("c:\path\to\phantomjs.exe")
我试图告诉phantomjs使用Ghostdriver的localversion而不是phantomjs iteself中包含的ghostdriver。
EDIT2: 所以在这里挖掘Java代码文件 https://github.com/detro/ghostdriver/blob/master/binding/java/src/main/java/org/openqa/selenium/phantomjs/PhantomJSDriverService.java
我找到了设置Java静态字符串
的代码 public static final String PHANTOMJS_GHOSTDRIVER_PATH_PROPERTY = "phantomjs.ghostdriver.path";
这意味着我在上面设置错了,但在纠正时仍然无法正常工作
var opts = new PhantomJSOptions();
opts.AddAdditionalCapability("phantomjs.ghostdriver.path", "c:\\path\\src\\main.js");
虽然变暖......
答案 0 :(得分:4)
你是对的,在当前发布的.NET绑定二进制版本中没有办法做到这一点。但是,更改has just been made将允许此更改。在.NET绑定中,代码如下所示:
var service = PhantomJSDriverService.CreateDefaultService(@"path\to\phantomjs.exe");
service.GhostDriverPath = @"path\to\ghostdriver\main.js";
var driver = new PhantomJSDriver(service);
通过PhantomJSDriverService
设置的内容与通过PhantomJSOptions
设置的内容之间的区别可以总结如下。如果该选项是要传递到PhantomJS.exe的命令行参数,则应通过该服务进行设置;如果它是GhostDriver行为的选项,则应通过选项类设置。
答案 1 :(得分:2)
您至少有两种方法可以指定phantomjs exec路径。
在PhantomJSDriverService中使用静态方法
var driver = new PhantomJSDriver(PhantomJSDriverService.CreateDefaultService("PHANTOMJSPATHHERE"));
使用PhantomJSDriver的appopriate构造函数(带字符串)
var driver = new PhantomJSDriver("PHANTOMJSPATHHERE");