2

我一直在寻找有关如何在 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 Google Chrome 浏览器版本是 52。

4

1 回答 1

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();
于 2017-03-29T19:07:39.707 回答