我一直在寻找有关如何在Selenium和C#的氛围中使用ChromeOptions和DesiredCapabilities的正确文档,但由于它全部是开源的,我只能找到建议(而且他们没有帮助有时)。我今天的问题是如何在ChromeOptions和DesiredCapabilities之间建立正确的关系。好像我正确地做了一切,但仍然得到System.InvalidOperationException: unknown error:cannot parse capability: chromeOptions from unknown error: unrecognized chrome option:Arguments
我的代码如下:
private static ChromeOptions Ops()
{
var options = new ChromeOptions();
options.AddArgument("--no-startup-window");
options.BinaryLocation = @"C:\path\path\path\chromedriver.exe";
return options;
}
private static DesiredCapabilities Caps()
{
DesiredCapabilities caps = new DesiredCapabilities();
caps.SetCapability(CapabilityType.BrowserName, "chrome");
caps.SetCapability(ChromeOptions.Capability,Ops().ToCapabilities());
return caps;
}
IWebDriver driver = new RemoteWebDriver(new Uri("http://localhost:4444/wd/hub"), Caps());
找不到传递错误参数的地方。有人遇到过同样的问题吗?这是ChromeDriver版本2.28和selenium WebDriver v 3.3.0谷歌Chrome浏览器版本是52。
答案 0 :(得分:1)
您无需设置浏览器名称; ChromeOptions会为您做到这一点。
.NET绑定正朝着DesiredCapabilites不应该采用的模式发展 直接使用,即使使用RemoteWebDriver。为方便起见,ChromeOptions类 有一个ToCapabilities()方法
很像--disable-javascript,如果你使用--no-startup-window,chromedriver将不起作用。 它需要启动一个窗口来建立与AutomationProxy的连接。
这样我们就可以了:
var options = new ChromeOptions();
options.BinaryLocation = @"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe";
IWebDriver driver = new RemoteWebDriver(new Uri("http://localhost:4444/wd/hub"), options.ToCapabilities());
但是,你实际上在运行网格吗?如果你在一台机器上进行测试,那就更简单了:
IWebDriver driver = new ChromeDriver();