【问题标题】:C# implementation of RemoteWebDriver fails to install Chrome extensionRemoteWebDriver 的 C# 实现无法安装 Chrome 扩展
【发布时间】:2016-10-06 20:12:27
【问题描述】:

此票证与票证 1578 for Selenium 相关,但我的问题与该票证中的 Chrome 而不是 Firefox 有关。

使用本地驱动程序时可以安装和配置扩展。使用 RemoteWebDriver 的 C# 实现做同样的事情不会。用 Chrome 对此进行了测试。

在我的测试用例中,远程执行是针对 SauceLabs 完成的。联系了他们的支持,他们确认通过 RemoteWebDriver 安装扩展在 JAVA 实现中有效,但在使用 C# 实现时失败。

引用他们的支持票:

“我自己尝试过,但我自己遇到了问题,所以这可能是 C# Selenium 与 RemoteWebDriver 绑定的缺陷。”

我的代码:

private IWebDriver GetSauceLabsDriver(){
    var outPutDirectory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
    ChromeOptions options = new ChromeOptions();
    options.AddExtensions(outPutDirectory + @"\3.1.3_0.crx");
    //DesiredCapabilities caps = (DesiredCapabilities)options.ToCapabilities();
    var caps = new DesiredCapabilities();
    caps.SetCapability(ChromeOptions.Capability, options.Extensions[0]);
    caps.SetCapability(CapabilityType.BrowserName, "chrome");
    caps.SetCapability(CapabilityType.Version, "53.0");
    caps.SetCapability(CapabilityType.Platform, "Windows 10");
    caps.SetCapability("deviceName", "");
    caps.SetCapability("deviceOrientation", "");
    caps.SetCapability("username", "kin");
    caps.SetCapability("accessKey", "9cd6-438e-a9635b70953d");
    caps.SetCapability("name", TestContext.CurrentContext.Test.Name);

    return new RemoteWebDriver(new Uri("http://ondemand.saucelabs.com:80/wd/hub"), caps,
        TimeSpan.FromSeconds(600));
}

【问题讨论】:

  • c# 中的失败是什么意思?如果发生也需要共享异常

标签: c# selenium selenium-webdriver


【解决方案1】:

这是 .NET 绑定用户常犯的错误。您几乎不应该直接在代码中使用DesiredCapabilities 类。相反,您应该几乎只使用ChromeOptions 类在实例化驱动程序之前设置所有选项,并使用.ToCapabilitied() 方法将其转换为可与RemoteWebDriver 构造函数一起使用的ICapabilities 对象.在您的具体情况下,看起来像这样:

private IWebDriver GetSauceLabsDriver()
{
    var outPutDirectory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
    ChromeOptions options = new ChromeOptions();
    options.AddExtensions(outPutDirectory + @"\3.1.3_0.

    // Add capabilities that belong at the top
    // level of the capabilities object as opposed
    // to part of the chromeOptions capability. Note
    // that setting the browser name is entirely 
    // redundant and thus is not done. Likewise,
    // deviceName and deviceOrientation are 
    options.AddAdditionalCapability(CapabilityType.Version, "53.0", true);
    options.AddAdditionalCapability(CapabilityType.Platform, "Windows 10", true);
    options.AddAdditionalCapability("username", "kin", true);
    options.AddAdditionalCapability("accessKey", "9cd6-438e-a9635b70953d", true);
    options.AddAdditionalCapability("name", TestContext.CurrentContext.Test.Name, true);

    return new RemoteWebDriver(new Uri("http://ondemand.saucelabs.com:80/wd/hub"), options.ToCapabilities(),
        TimeSpan.FromSeconds(600));
}

【讨论】:

  • 感谢 Jim,工作完美无瑕,感谢您的更正和您在清理冗余代码方面的投入。只是为了澄清我的理解。不要将 DesiredCapabilities 与 Chrome 一起使用,而应使用 ChromeOptions。这不适用于其他驱动程序,对吧?我必须进行的唯一更新不是使用 SetAdditionalCapability(),而是使用 AddAdditionalCapability(),因为 ChromeOptions 没有 SetAdditionalCapability() 方法。
  • 代码是从内存中写入的,没有访问 IDE。我已经编辑了我的答案以使用正确的方法名称。要回答您的问题,唯一不使用适当的选项类的驱动程序是Firefox。从 3.0 开始,您也将使用 FirefoxOptions 类。
猜你喜欢
  • 1970-01-01
  • 2023-02-24
  • 1970-01-01
  • 2013-09-28
  • 2019-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多