我正在使用运行firefox 41.0.2的firefox webdriver Nunit 3.4.1 硒2.47.0 specflow 2.1.0 我的测试并行进行。
通过几天我的测试在jenkins运行时未能完成,运行卡在一个进程上,无法继续运行其余部分。在运行20多个场景时,我间歇性地能够在本地重现错误。我收到以下异常,有没有人见过这个问题?
OpenQA.Selenium.WebDriverException:抛出了一个带有空响应的异常,向URL http://localhost:7056/hub/session/d0a83b9c-bd79-4218-8eac-dc8b273f8f40/element/%7B84966a91-06c4-42dd-98c0-278ed35e3667%7D/attribute/value的远程WebDriver服务器发送HTTP请求。
异常的状态是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(String driverCommandToExecute,Dictionary
2 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.WhereSelectEnumerableIterator
2.MoveNext() 在System.Linq.Enumerable.Any [TSource](IEnumerable1 source, Func
2谓词) at TeamHours.Automation.StandAlone.WebComponents.Pages.WeeklySalesForecastPage.Save()in c:\ Program Files(x86)\ Jenkins \ jobs \ Automation Build Develop \ workspace \ TeamHours.Automation.StandAlone.WebComponents \ Pages \ WeeklySalesForecastPage.cs:第39行 at TeamHours.Automation.StandAlone.CommonSteps.Steps.SalesForecast.WeeklySalesForecastGraphsSteps.WhenISaveTheForecast()in 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 binding,IContextManager contextManager,Object []参数,ITestTracer testTracer,TimeSpan&amp; duration) 在TechTalk.SpecFlow.Infrastructure.TestExecutionEngine.ExecuteStepMatch(BindingMatch match,Object []参数) 在TechTalk.SpecFlow.Infrastructure.TestExecutionEngine.ExecuteStep(StepInstance stepInstance) 在TechTalk.SpecFlow.Infrastructure.TestExecutionEngine.OnAfterLastStep() at 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行 at TeamHours.Automation.StandAlone.RegresionTests.Features.Schedule.ScheduleGraphFeature.VerifyScheduleGraphShowsCorrectPeopleAndOverstaffedWhenDemandIsExceeded(String role,String tab,String link,String noOfItems,String peopleRequired,String itemsOrSales,String tab2,String view,String total,String tab3,String type1,字符串type2,String type3,String [] exampleTags)在c:\ Program Files(x86)\ Jenkins \ jobs \ Automation Build Develop \ workspace \ TeamHours.Automation.StandAlone.RegresionTests \ Features \ Schedule \ ScheduleGraph.feature:第133行 --WebException 在System.Net.HttpWebRequest.GetResponse() 在OpenQA.Selenium.Remote.HttpCommandExecutor.CreateResponse(WebRequest请求) --SocketException 在System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot,SocketAddress socketAddress) at System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure,Socket s4,Socket s6,Socket&amp; socket,IPAddress&amp; address,ConnectSocketState state,IAsyncResult asyncResult,Exception&amp; exception)
答案 0 :(得分:2)
我们发现此问题可能与主机上耗尽的TCP端口有关。关于这一点还有其他材料,但基本上,由于驱动程序轮询操作系统以获得可用端口,因此Web驱动程序耗尽了它们卡在等待状态的所有端口。修复涉及修改注册表以增加可用端口数或减少它们处于等待状态的时间。
答案 1 :(得分:1)
花了一个小时的时间,我才能找到确切的问题。就我而言,我使用的是Nuget Package Manager中的以下版本。
在将它们降级到较低版本后,evrything可以按预期工作。
答案 2 :(得分:0)
当我遇到此错误时,答案一直是&#34;更新**** driver.exe&#34;。在我的情况下ChromeDriver.exe,在你的情况下它可能是FireFoxDriver.exe
答案 3 :(得分:0)
我认为 GeckoDriver.exe / ChromeDriver.exe / IEDriverServer.exe 与各自的浏览器不兼容导致此问题。
我遇到了同样的问题,并将我的Chrome浏览器更新到最新版本。因此,升级/降级浏览器(或)相应的驱动程序可以帮助解决此问题。
简而言之,您必须让浏览器与相应驱动程序的兼容版本保持同步。
答案 4 :(得分:0)
在我的情况下,这是因为您(出于某种原因)故意在我的项目 FOLDER 中存在两个版本的浏览器驱动程序文件夹。
背景: 假设您使用Nuget-Package-Manager安装Selenium Web驱动程序,那么在项目下将有一个名为“ packages”的文件夹。
在“程序包”文件夹中,您将看到为解决方案安装的所有NuGet程序包。
可能存在问题的地方 “程序包”文件夹中有2个不同版本的Firefox驱动程序:0.20和0.21。
一旦我删除了0.20文件夹并保留了0.21,问题就消失了。
可能的原因: 您已经在这个项目上工作了一段时间,并且有几个分支,您在不同的分支中有不同的Web驱动程序NuGet版本。
当您从一个版本合并到另一个版本时,低版本不会自动删除,但新版本也已安装,并且两个版本都存在。
答案 5 :(得分:0)
此问题可能发生在您启动的端口无法达到的情况下。为了使您的浏览器窗口关闭,在这种情况下,每个测试用例都引用QuitDriver而不是下一个测试用例,退出驱动程序必须在完成测试套件后触发。在Selenium中,我们需要使用[OneTimeTearDown]而不是[TearDown]。
答案 6 :(得分:0)
就我而言,我很早就用 using
语句处理了驱动程序。
using IWebDriver webDriver = new ChromeDriver("C:\\Programs2\\chromedriver", options);
我删除了它并且它起作用了。