Selenium和C#中的ChromeOptions和DesiredCapabilities关系

时间:2017-03-21 20:22:30

标签: c# selenium chrome-options

我一直在寻找有关如何在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。

1 个答案:

答案 0 :(得分:1)

您无需设置浏览器名称; ChromeOptions会为您做到这一点。

根据this comment

  

.NET绑定正朝着DesiredCapabilites不应该采用的模式发展   直接使用,即使使用RemoteWebDriver。为方便起见,ChromeOptions类   有一个ToCapabilities()方法

还有this comment

  

很像--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();