RemoteWebDriver无法在45000毫秒内绑定到锁定端口7054

时间:2013-03-05 19:50:04

标签: c# automation webdriver selenium-webdriver

我使用.NET绑定WebDriver通过Grid2同时运行测试。单独运行测试没有问题,但是当通过网格运行多个测试时,偶尔会发生以下错误,并且一旦出现错误,通常会有多个测试失败,原因相同:

  

无法在45000 ms内绑定到锁定端口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托管的机器。我的假设是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对象中删除了“Version”功能,并且在多次测试运行后没有看到错误表面。我不知道这是否是一个实际的解决方案,但它似乎至少可以降低异常的风险。

2 个答案:

答案 0 :(得分:1)

我发现重启服务器通常可以解决问题。如果问题仍然存在,请尝试通过网格运行较少的连续测试或增加Selenium节点上的内存容量。

答案 1 :(得分:0)

我多次遇到过这个错误,我发现其实际上就是它的原因。

我通常将远程桌面从我的开发计算机运行到我的VM中,以观察我的网格上的测试。

当我使用Alt-Tab和Shift-Alt-Tab切换本地桌面上的窗口时,我已经完成了选择虚拟机,而Selenium正在启动FireFox并且无意中导致Firefox以安全模式启动,因为我按住了键

当发生这种情况时,Firefox会等待确认您确实要以安全模式启动并且永远不会完全打开。在您确认之前,所有后续打开FireFox的请求都将失败。

当错误发生时,我常常停止测试并从测试生成器开始重新启动所有内容,直到有一天我开始使用虚拟机,注意到对话框并开始挖掘对话框的原因。就在那时我才意识到我正在让FireFox以这种方式开始。现在我更加小心,不再有问题了。