c# Selenium 2.53 在 firefox 升级到 47 后移动到 marionette 驱动程序

c# Selenium 2.53 moving to marionette driver after firefox upgrade to 47

我正在尝试使用 selenium 进入升级后的 firefox web 浏览器自动化。 selenium 似乎需要 marionette 驱动程序才能继续工作。我遵循了开发者设置的说明,

  1. 已下载驱动程序
  2. 将其重命名为 wires.exe

以下代码未能将 PATH 正确设置为自定义路径。

System.Environment.SetEnvironmentVariable("webdriver.gecko.driver", "@C:\DOWNLOADS\wires.exe")

所以我将 wires.exe 添加到 debug\bin 文件夹,然后 wires.exe 工作正常,但我收到以下错误

System.InvalidOperationException was caught Message=entity not found Source=WebDriver

这是我用来启动 webdriver 的代码

FirefoxOptions option1 = new FirefoxOptions();
option1.IsMarionette = true;
option1.AddAdditionalCapability("marionette", true);
driver = new FirefoxDriver(option1);

首先,您需要将驱动程序添加到系统路径中,而不是作为环境变量。 其次,您需要在所需功能中设置标志,而不是 Firefox 选项。参见:Marionette Webdriver

因此对于远程网络驱动程序:

DesiredCapabilities capabilities = DesiredCapabilities.Firefox();  
capabilities.SetCapability("marionette", true); 
var driver = new RemoteWebDriver(capabilities); 

将 webdriver 添加到您的 windows path:

最简单的方法是打开开始菜单 > 搜索环境 > 打开编辑系统环境变量 > 单击环境变量 > 在列表中搜索路径 > 单击编辑 > 添加 ;C:\path\to\webdriver\location\wires.exe 到结束并点击保存。

对于您的本地(非网络驱动程序)测试,您是对的,您可以 运行 您的网络驱动程序使用以下内容:

var driver = new FirefoxDriver(new FirefoxOptions());

你不应该使用

option1.IsMarionette = true; option1.AddAdditionalCapability("marionette", true);

如果您在路径环境变量中正确设置了驱动程序路径。

我在使用 FirefoxDriver(new FirefoxOptions()) 时也遇到了 "Entity Not Found" 错误。它似乎在 C:\Program Files (x86)\Nightly 中寻找 firefox.exe 但没有找到。我发现这个有效:

FirefoxDriverService service = FirefoxDriverService.CreateDefaultService();
service.FirefoxBinaryPath = @"C:\Program Files (x86)\Mozilla Firefox\firefox.exe";
IWebDriver driver = new FirefoxDriver(service);

我试了一下,效果不错:

  1. 安装 FirefoxDevEdition
  2. 下载geckodriver.exe

FirefoxDriverService service = FirefoxDriverService.CreateDefaultService(@"C:\Users\jmalpartida\Downloads\geckodriver-v0.8.0-win32", "geckodriver.exe");
service.Port = 64444;
service.FirefoxBinaryPath = @"C:\Program Files (x86)\Firefox Developer Edition\firefox.exe";
IWebDriver driver = new FirefoxDriver(service);