web-dev-qa-db-ja.com

Selenium RemoteWebDriver c#-System.InvalidOperationException

Selenium.WebDriverのv3.4.0を使用したサンプルUIテストプロジェクトがあります。

ローカルドライバーに対してテストを実行すると、すべてが正常に動作しますが、Selenium Grid 2を使用して動作させたいと考えています。

新しいRemoteWebDriverをインスタンス化しようとすると、詳細がほとんどない例外が発生します。

Driver = new RemoteWebDriver(new Uri(GridUrl), Capabilities);     

注:GridUrlは " http:// localhost:4444/wd/hub "

次のように、StackTraceでSystem.InvalidOperationExceptionをスローします。

   at OpenQA.Selenium.Remote.RemoteWebDriver.UnpackAndThrowOnError(Response errorResponse)
   at OpenQA.Selenium.Remote.RemoteWebDriver.Execute(String driverCommandToExecute, Dictionary`2 parameters)
   at OpenQA.Selenium.Remote.RemoteWebDriver.StartSession(ICapabilities desiredCapabilities)
   at OpenQA.Selenium.Remote.RemoteWebDriver..ctor(ICommandExecutor commandExecutor, ICapabilities desiredCapabilities)
   at OpenQA.Selenium.Remote.RemoteWebDriver..ctor(Uri remoteAddress, ICapabilities desiredCapabilities)
   at xxxx.Ui.Tests.SeleniumTests.TestInitialize() in C:\Users\xxxx\Documents\Visual Studio 2015\Projects\xxxx.Ui.Tests\xxxx.Tests\PersonTests.cs:line 38

ハブ構成

次の構成でローカルに実行されているハブのv3.4.0があります。

{
  "port": 4444,
  "newSessionWaitTimeout": -1,
  "servlets" : [],
  "withoutServlets": [],
  "custom": {},
  "capabilityMatcher":"org.openqa.grid.internal.utils.DefaultCapabilityMatcher",
  "throwOnCapabilityNotPresent": true,
  "cleanUpCycle": 5000,
  "role": "hub",
  "debug": false,
  "browserTimeout": 0,
  "timeout": 1800
}

ハブの開始点:

Java -jar Selenium-server-standalone-3.4.0.jar -role hub

これは問題なく起動し、実行中のようです。 working hub console

ノード構成

私はいくつかのノード(chromedriver.exe、IEDriverServer.exeおよびgeckodrvier.exe)を試しました。これらはいずれもRemoteWebDriverでは機能しません。それらはすべて、システムのPATH変数に追加されたディレクトリにあります。

Chrome設定

{
  "capabilities":
  [
    {
      "browserName": "chrome",
      "maxInstances": 5,
      "seleniumProtocol": "WebDriver"
    }
  ],
  "proxy": "org.openqa.grid.Selenium.proxy.DefaultRemoteProxy",
  "maxSession": 5,
  "port": 5556,
  "register": true,
  "registerCycle": 5000,
  "hub": "http://localhost:4444",
  "nodeStatusCheckTimeout": 5000,
  "nodePolling": 5000,
  "role": "node",
  "unregisterIfStillDownAfter": 60000,
  "downPollingLimit": 2,
  "debug": false,
  "servlets" : [],
  "withoutServlets": [],
  "custom": {}
}

以下で始まるノード:

Java -jar Selenium-server-standalone-3.4.0.jar -role node -nodeConfig chromeNodeConfig.json

他のノード構成は、ブラウザ名とポートが異なる以外はほとんど同じです。

すべてのノードが起動すると、コンソールは次のようになります。 console with nodes running

私は例外から多くを得ることができません。私が持っているドライバーのバージョン管理の問題ですか?私は自分のDesiredCapabilitiesをカスタマイズして、ノード構成のそれらと一致することを確認しました。すべてうまくいきます。


更新

リクエストに応じて、ブラウザを起動する方法についてもう少し詳しく説明します。ブラウザーはいずれもRemoteWebDriverでは機能しませんが、ローカルドライバーでは機能します。 Chromeの例を示す-それぞれの違いは、基本クラスのコンストラクターに渡す機能に関することだけです。

私のテストクラスで

[TestClass]
public class PersonTests : PersonTestBase
{
    public PersonTests() 
        : base(DesiredCapabilities.Chrome())
    {
    }

    [TestCategory("Chrome")]
    [TestMethod]
    public void Chrome_ShouldCreatePlacement()
    {
        this.ShouldCreatePerson();
    }        
}

私の基本クラスでは、私は次のことをしています

public abstract class PersonTestBase
{
    protected IWebDriver Driver;
    protected ICapabilities Capabilities;
    protected string TargetUrl;
    protected string GridUrl;

    protected PersonTests(ICapabilities capabilities)
    {
        this.Capabilities = capabilities;
    }

    [TestInitialize]
    public void TestInitialize()
    {
        TargetUrl = "http://urlOfMyWebsite";
        GridUrl = "http://localhost:4444/wd/hub"

        Driver = new RemoteWebDriver(new Uri(GridUrl), Capabilities);            
    }

    [TestCleanup]
    public void TestCleanup()
    {
        Driver.Quit();
    }

    protected void ShouldCreatePerson()
    {
        Driver.Navigate().GoToUrl(TargetUrl);

        //rest of test code ommitted
    }
}
10
obaylis

この問題 が解決され、Selenium Standalone Serverの新しいリリースが利用可能になるまで3.3.0にダウングレードします(推奨ソリューション)

または

  1. ダウンロード ソリューション
  2. コメント この行
  3. dotnet言語バインディングを作成
    • ルートディレクトリでコマンドウィンドウを開く
    • go //dotnet:releaseを実行します
    • そして{root}/build/dotnet/distにビルドされたバイナリを参照します

注:この回避策は何も修正しません[〜#〜] [〜#〜]。失敗の原因となったSeleniumグリッドコードは無視されます。

別のメモ:Selenium 3.4へのアップグレードには、Webドライバーのアップグレードも必要になる場合があることに注意してください

11

V3.5.1この問題は修正されています。

NuGETマネージャーとSeleniumスタンドアロンjarを使用して、Selenium NuGETパッケージをアップグレードします。

2
DenisD

Stephenが提案した3.3.0へのダウングレードは、既知の issue を引き起こす可能性があります。代わりにv3.3.1にダウングレードしてみてください。

ここからv3.3.1を取得できます: http://Selenium-release.storage.googleapis.com/index.html?path=3.3/

0
Rukshod