【问题标题】:OpenQA.Selenium.WebDriverException : A exception with a null response was thrown and halts the selenium test runOpenQA.Selenium.WebDriverException :抛出了一个带有空响应的异常并停止了 selenium 测试运行
【发布时间】:2017-01-22 01:36:40
【问题描述】:

我正在使用运行 firefox 41.0.2 的 firefox webdriver 单元 3.4.1 硒 2.47.0 规范流 2.1.0 我的测试并行运行。

几天过去了,我的测试在通过 jenkins 运行时未能完成,运行卡在一个进程上,无法继续运行的其余部分。在运行 20 多个场景时,我间歇性地能够在本地重现错误。我收到以下异常,有没有人见过这个问题?

OpenQA.Selenium.WebDriverException : 向远程 WebDriver 服务器发送 HTTP 请求以获取 URL http://localhost:7056/hub/session/d0a83b9c-bd79-4218-8eac-dc8b273f8f40/element/%7B84966a91-06c4-42dd-98c0-278ed35e3667%7D/attribute/value,引发了具有空响应的异常。

异常状态为ConnectFailure,消息为:无法连接到远程服务器 ----> System.Net.WebException:无法连接到远程服务器 ----> System.Net.Sockets.SocketException : 无法建立连接,因为目标机器主动拒绝它 127.0.0.1:7056

++++++++++++++++++++++ 堆栈跟踪: 在 OpenQA.Selenium.Remote.HttpCommandExecutor.CreateResponse(WebRequest 请求) 在 OpenQA.Selenium.Firefox.FirefoxDriverCommandExecutor.Execute(命令 commandToExecute) 在 OpenQA.Selenium.Remote.RemoteWebDriver.Execute(字符串 driverCommandToExecute,Dictionary2 parameters) at OpenQA.Selenium.Remote.RemoteWebElement.GetAttribute(String attributeName) at TeamHours.Automation.StandAlone.WebComponents.Pages.WeeklySalesForecastPage.<Save>b__0(IWebElement s) in c:\Program Files (x86)\Jenkins\jobs\Automation Build Develop\workspace\TeamHours.Automation.StandAlone.WebComponents\Pages\WeeklySalesForecastPage.cs:line 38 at System.Linq.Enumerable.WhereSelectEnumerableIterator2.MoveNext() 在 System.Linq.Enumerable.Any[TSource](IEnumerable1 source, Func2 谓词) 在 c:\Program Files (x86)\Jenkins\jobs\Automation Build Develop\workspace\TeamHours.Automation.StandAlone.WebComponents\Pages\WeeklySalesForecastPage.cs 中的 TeamHours.Automation.StandAlone.WebComponents.Pages.WeeklySalesForecastPage.Save():第 39 行 在 TeamHours.Automation.StandAlone.CommonSteps.Steps.SalesForecast.WeeklySalesForecastGraphsSteps.WhenISaveTheForecast() 在 c:\Program Files (x86)\Jenkins\jobs\Automation Build Develop\workspace\TeamHours.Automation.StandAlone.CommonSteps\Steps\SalesForecast\ WeeklySalesForecastGraphsSteps.cs:第 73 行 在 TechTalk.SpecFlow.Bindings.BindingInvoker.InvokeBinding(IBinding 绑定,IContextManager contextManager,Object[] 参数,ITestTracer testTracer,TimeSpan& 持续时间) 在 TechTalk.SpecFlow.Infrastructure.TestExecutionEngine.ExecuteStepMatch(BindingMatch 匹配,对象 [] 参数) 在 TechTalk.SpecFlow.Infrastructure.TestExecutionEngine.ExecuteStep(StepInstance stepInstance) 在 TechTalk.SpecFlow.Infrastructure.TestExecutionEngine.OnAfterLastStep() 在 TeamHours.Automation.StandAlone.RegresionTests.Features.Schedule.ScheduleGraphFeature.ScenarioCleanup() 在 c:\Program Files (x86)\Jenkins\jobs\Automation Build Develop\workspace\TeamHours.Automation.StandAlone.RegresionTests\Features\Schedule\ ScheduleGraph.feature.cs:第 0 行 在 TeamHours.Automation.StandAlone.RegresionTests.Features.Schedule.ScheduleGraphFeature.VerifyScheduleGraphShowsCorrectPeopleAndOverstaffedWhenDemandIsExceeded(字符串角色,字符串选项卡,字符串链接,字符串 noOfItems,字符串 peopleRequired,字符串 itemsOrSales,字符串 tab2,字符串视图,字符串总计,字符串 tab3,字符串 type1, c:\Program Files (x86)\Jenkins\jobs\Automation Build Develop\workspace\TeamHours.Automation.StandAlone.RegresionTests\Features\Schedule\ScheduleGraph.feature:line 133 中的字符串 type2、String type3、String[] exampleTags) --WebException 在 System.Net.HttpWebRequest.GetResponse() 在 OpenQA.Selenium.Remote.HttpCommandExecutor.CreateResponse(WebRequest 请求) --套接字异常 在 System.Net.Sockets.Socket.DoConnect(端点 endPointSnapshot,SocketAddress socketAddress) 在 System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Socket s4, Socket s6, Socket& 套接字, IPAddress& 地址, ConnectSocketState 状态, IAsyncResult asyncResult, Exception& 异常)

【问题讨论】:

    标签: c# selenium


    【解决方案1】:

    我们发现此问题可能与主机上的 TCP 端口耗尽有关。还有其他关于此的材料,但基本上 Web 驱动程序会耗尽所有端口,因为驱动程序会轮询操作系统以获取可用端口,从而使它们陷入等待状态。该修复涉及修改注册表以增加可用端口的数量或减少它们处于等待状态的时间。

    【讨论】:

    • 我已经将 MaxUserPort 设置为 '65534' 并将 TcpTimedWaitDelay 设置为 '30'(可以达到的最低值)。你还记得你的设置吗?我遇到了同样的端口耗尽问题。
    【解决方案2】:

    此问题可能发生在您启动的端口无法访问。这样您的浏览器窗口就关闭了,在这种情况下,每个测试用例都引用 QuitDriver 而不是下一个测试用例,退出驱动程序必须在完成测试套件后触发。在 Selenium 中,我们需要使用 [OneTimeTearDown] 而不是 [TearDown]..

    【讨论】:

      【解决方案3】:

      当我遇到此错误时,答案始终是“更新 ****driver.exe”。在我的情况下是 ChromeDriver.exe,在你的情况下它可能是 FireFoxDriver.exe

      【讨论】:

        【解决方案4】:

        花了一个小时后,我找到了确切的问题。就我而言,我使用的是 Nuget 包管理器中的以下版本。

        1. Selenium.Support - v3.13.1
        2. Selenium.WebDriver - v3.13.1
        3. Selenium.WebDriver.IEDriver - v3.13.0

        在将这些降级到较低版本后,一切都按预期工作。

        1. Selenium.Support - v3.12.1
        2. Selenium.WebDriver - v3.12.1
        3. Selenium.WebDriver.IEDriver - v3.12.0

        【讨论】:

          【解决方案5】:

          就我而言,我很早就用using 声明处理了驱动程序。

           using   IWebDriver webDriver = new ChromeDriver("C:\\Programs2\\chromedriver", options);
          

          我删除了它,它起作用了。

          【讨论】:

            【解决方案6】:

            我认为 GeckoDriver.exe/ ChromeDriver.exe/ IEDriverServer.exe 与各自的浏览器不兼容会导致此问题。

            我遇到了同样的问题,并将我的 chrome 浏览器更新到最新的解决方案。因此,升级/降级您的浏览器(或)相应的驱动程序可能有助于解决此问题。

            简而言之,您必须使浏览器与相应驱动程序的兼容版本保持同步。

            【讨论】:

              【解决方案7】:

              在我的情况下,这是因为您(出于某种原因)故意在我的项目FOLDER中存在两个版本的浏览器驱动程序文件夹。

              背景: 假设您使用 Nuget-Package-Manager 安装 selenium web 驱动程序,那么您的项目下将有一个名为“packages”的文件夹。

              在“包”文件夹中,您将看到为解决方案安装的所有 NuGet 包。

              可能存在问题的地方: “packages”文件夹中有 2 个不同版本的 Firefox 驱动程序:0.20 和 0.21。

              一旦我删除了 0.20 文件夹并只保留 0.21,问题就消失了。

              可能的原因: 你已经在这个项目上工作了一段时间并且有几个分支,你在不同的分支中有不同的 Web 驱动程序 NuGet 版本。

              当您从一个合并到另一个时,不知何故,低版本不会自动删除,但新版本也已安装,并且两个版本都存在。

              2 different versions of the same web driver

              【讨论】:

                【解决方案8】:

                我用[OneTimeTearDown] 代替了[TearDown],它成功了。

                【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2014-04-18
                • 1970-01-01
                • 2019-06-11
                • 2021-03-21
                • 1970-01-01
                • 2019-05-26
                • 2021-08-25
                • 1970-01-01
                相关资源
                最近更新 更多