2016-10-06 68 views
0

此故障单与门票1578 for Selenium有关,但我的问题是Chrome和Firefox不在该故障单中。RemoteWebDriver的C#实现无法安装Chrome扩展程序

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

在我的测试案例中,远程执行是针对SauceLabs完成的。联系他们的支持,他们证实通过RemoteWebDriver安装扩展可以在JAVA实现中工作,但是使用C#实现失败。

从他们的支持票报价:

“我尝试这样做我自己,我行驶到我自己的问题结束,所以这可能是与RemoteWebDriver的C#硒绑定一个缺陷。”

我的代码:

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)); 
} 
+0

你是什么意思在c#失败?如果发生,也需要共享异常 –

回答

1

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

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)); 
} 
+0

感谢Jim,工作完美无瑕,并感谢您对纠正错误和清理冗余代码的意见。只是为了澄清我的理解。不要在Chrome中使用DesiredCapabilities,而应该使用ChromeOptions。这不适用于其他司机,对吗?我必须做的唯一更新不是使用SetAdditionalCapability(),而是必须使用AddAdditionalCapability(),因为ChromeOptions没有SetAdditionalCapability()方法。 –

+0

代码是从内存写入的,无法访问IDE。我编辑了我的答案以使用正确的方法名称。要回答你的问题,唯一没有使用适当的选项类的驱动程序是Firefox。从3.0开始,你也会使用一个'FirefoxOptions'类。 – JimEvans

相关问题