我使用 WebDriver 的 .NET 绑定通过 Grid2 同时运行测试。单独运行测试是没有问题的,但是通过Grid运行多个测试时,偶尔会出现以下错误,而一旦出现,通常多个测试失败,原因相同:
无法在 45000 毫秒内绑定到锁定端口 7054 构建信息:版本:'2.29.0',修订:'58258c3',时间:'2013-01-17 22:46:35' 系统信息:os.name:'Windows Server 2008 R2', os.arch: 'x86', os.version: '6.1', java.version: '1.7.0_11' 驱动信息: driver.version: FirefoxDriver
我们已将问题的根源追溯到我们创建 RemoteWebDriver 实例的位置,如下所示:
var desiredCapabilites = new DesiredCapabilities();
desiredCapabilites.SetCapability(CapabilityType.BrowserName, "firefox");
desiredCapabilites.SetCapability(CapabilityType.Platform, new Platform(PlatformType.Windows));
desiredCapabilites.SetCapability(CapabilityType.Version, "14.0.1");
try { _driver = new RemoteWebDriver(new Uri("http://qwautomation:4444/wd/hub"), desiredCapabilites, TimeSpan.FromSeconds(180.0)); }
catch (Exception ex) { Notes.Add("AUTOMATION ERROR: This error originates from MasterSetup.cs (line 47)"); Notes.Add("AUTOMATION ERROR: " + ex.Message); Exception("AUTOMATION ERROR: This error originates from MasterSetup.cs (line 47)"); }
其中,qwautomation 是我们的 Grid Hub 所在的机器。我的假设是集线器正在将测试分派到端口上已经包含 FireFox 实例的节点,或者 JVM 没有正确处理会话(因为我可以在节点机器中看到带有 WebDriver 会话 ID 的文件夹临时文件夹)。我已经为节点和集线器编写了配置文件,我将在下面发布。如果无法绑定到 FireFox 端口,我不知道是否有办法将测试“排队”。
中心
{
"port": 4444,
"newSessionWaitTimeout": 30000,
"nodePolling": 5000,
"cleanUpCycle": 5000,
"timeout": 300000,
"browserTimeout": 0,
"maxSession": 1
}
节点
{
"capabilities":
[
{
"browserName":"firefox",
"maxInstances":1
}
],
"configuration":
{
"cleanUpCycle":2000,
"timeout":180000,
"maxSession":5,
"hubPort":4444,
"hubHost":"qwautomation"
}
}
编辑:我已经从 DesiredCapabilities 对象中删除了“版本”功能,并且在几次测试运行后没有看到错误表面。我不知道这是否是一个实际的解决方案,但它似乎至少降低了异常的风险。