2016-10-06 8 views
0

このチケットはのチケットに関連していますが、私の問題はそのチケットのようにChromeではなくFirefoxで発生します。C#RemoteWebDriverの実装で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クラスを使用して、ドライバをインスタンシエートする前にすべてのオプションを設定し、メソッドを使用して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)); 
} 
+0

ジムに感謝します。完璧に働き、冗長コードを訂正していただきありがとうございます。私が理解していることを明確にするために。 ChromeでDesiredCapabilitiesを使用するのではなく、ChromeOptionsを使用します。これは他のドライバーには当てはまりません。 SetAdditionalCapability()メソッドを使用したのではなく、AddAdditionalCapability()を使用しなければならなかったのは、ChromeOptionsにSetAdditionalCapability()メソッドがないためです。 –

+0

コードはメモリから書き込まれ、IDEにアクセスすることはできません。正しいメソッド名を使用するために私の答えを編集しました。あなたの質問に答えるために、適切なOptionsクラスを使用しない唯一のドライバはFirefoxです。 3.0からは、FirefoxOptionsクラスも使用します。 – JimEvans

関連する問題