c#实现RemoteWebDriver安装Chrome扩展失败

本文关键字:扩展 失败 Chrome 安装 实现 RemoteWebDriver | 更新日期: 2023-09-27 18:11:49

这张票与Selenium的票证1578有关,但我的问题是Chrome而不是Firefox。

安装和配置扩展工作时,使用本地驱动程序。使用RemoteWebDriver的c#实现做同样的事情不会。

在我的测试用例中,远程执行是针对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#实现RemoteWebDriver安装Chrome扩展失败

这是. 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));
}