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 驱动程序才能继续工作。我遵循了开发者设置的说明,
- 已下载驱动程序
- 将其重命名为 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);
我试了一下,效果不错:
- 安装 FirefoxDevEdition
- 下载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);
我正在尝试使用 selenium 进入升级后的 firefox web 浏览器自动化。 selenium 似乎需要 marionette 驱动程序才能继续工作。我遵循了开发者设置的说明,
- 已下载驱动程序
- 将其重命名为 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);
我试了一下,效果不错:
- 安装 FirefoxDevEdition
- 下载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);