设置PhantomJSOptions.AddAdditionalCapability以引用ghostdriver的本地副本

时间:2013-07-17 02:10:11

标签: c# selenium phantomjs ghostdriver

在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");

虽然变暖......

2 个答案:

答案 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");