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
私はいくつかのノード(chromedriver.exe、IEDriverServer.exeおよびgeckodrvier.exe)を試しました。これらはいずれもRemoteWebDriverでは機能しません。それらはすべて、システムのPATH変数に追加されたディレクトリにあります。
{
"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
他のノード構成は、ブラウザ名とポートが異なる以外はほとんど同じです。
すべてのノードが起動すると、コンソールは次のようになります。
私は例外から多くを得ることができません。私が持っているドライバーのバージョン管理の問題ですか?私は自分の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
}
}
この問題 が解決され、Selenium Standalone Serverの新しいリリースが利用可能になるまで3.3.0にダウングレードします(推奨ソリューション)
または
go //dotnet:release
を実行します注:この回避策は何も修正しません[〜#〜] [〜#〜]。失敗の原因となったSeleniumグリッドコードは無視されます。
別のメモ:Selenium 3.4へのアップグレードには、Webドライバーのアップグレードも必要になる場合があることに注意してください
V3.5.1この問題は修正されています。
NuGETマネージャーとSeleniumスタンドアロンjarを使用して、Selenium NuGETパッケージをアップグレードします。
Stephenが提案した3.3.0へのダウングレードは、既知の issue を引き起こす可能性があります。代わりにv3.3.1にダウングレードしてみてください。
ここからv3.3.1を取得できます: http://Selenium-release.storage.googleapis.com/index.html?path=3.3/