Selenium Error - 对远程WebDriver的HTTP请求在60秒后超时

问题描述 投票:68回答:13

我已经使用Selenium好几个月,我们用它来自动化我们的一些内部测试过程。脚本一直很好。我最近使用FF 27.01升级到C#2.40.0 webdriver,我们的脚本现在在随机位置失败,出现以下错误。

[Portal.SmokeTest.SmokeRunTest.Booking] TearDown method failed. OpenQA.Selenium.WebDriverException : The HTTP request to the remote WebDriver server for URL htt(p)://localhost:7055/hub/session/56e99e88-ba17-4d12-bef1-c6a6367ccc2f/element timed out after 60 seconds.
  ----> System.Net.WebException : The operation has timed out
TearDown : OpenQA.Selenium.WebDriverException : The HTTP request to the remote WebDriver server for URL htt(p)://localhost:7055/hub/session/56e99e88-ba17-4d12-bef1-c6a6367ccc2f/window timed out after 60 seconds.
  ----> System.Net.WebException : The operation has timed out
[09:01:20]
[Portal.SmokeTest.SmokeRunTest.Booking] TearDown method failed. OpenQA.Selenium.WebDriverException : The HTTP request to the remote WebDriver server for URL htt(p)://localhost:7055/hub/session/56e99e88-ba17-4d12-bef1-c6a6367ccc2f/element timed out after 60 seconds.
  ----> System.Net.WebException : The operation has timed out
TearDown : OpenQA.Selenium.WebDriverException : The HTTP request to the remote WebDriver server for URL htt(p)://localhost:7055/hub/session/56e99e88-ba17-4d12-bef1-c6a6367ccc2f/window timed out after 60 seconds.
  ----> System.Net.WebException : The operation has timed out
   at OpenQA.Selenium.Support.UI.DefaultWait`1.PropagateExceptionIfNotIgnored(Exception e)
   at OpenQA.Selenium.Support.UI.DefaultWait`1.Until[TResult](Func`2 condition)
   at Portal.Test.Helpers.Process_Bookings.OpenBookings.SelectBooking(String bookingnumber)
   at Portal.SmokeTest.SmokeRunTest.Booking() in d:\TeamCityAgent\work\dac1dcea7f2e80df\SmokeTests\SmokeRunTest.cs:line 68
--WebException
   at System.Net.HttpWebRequest.GetResponse()
   at OpenQA.Selenium.Remote.HttpCommandExecutor.CreateResponse(WebRequest request)
--TearDown
   at OpenQA.Selenium.Remote.HttpCommandExecutor.CreateResponse(WebRequest request)
   at OpenQA.Selenium.Remote.HttpCommandExecutor.Execute(Command commandToExecute)
   at OpenQA.Selenium.Firefox.Internal.ExtensionConnection.Execute(Command commandToExecute)
   at OpenQA.Selenium.Remote.RemoteWebDriver.Execute(String driverCommandToExecute, Dictionary`2 parameters)
   at OpenQA.Selenium.Remote.RemoteWebDriver.Close()
   at Portal.Test.Helpers.Setup.CloseWebdriver()
   at Portal.SmokeTest.SmokeRunTest.TearDown() in d:\TeamCityAgent\work\dac1dcea7f2e80df\SmokeTests\SmokeRunTest.cs:line 162
--WebException
   at System.Net.HttpWebRequest.GetResponse()
   at OpenQA.Selenium.Remote.HttpCommandExecutor.CreateResponse(WebRequest request)

我设法追踪到一行代码的最新错误:

_setup.driver.FindElement(By.XPath("//button[@class='buttonSmall lockBookingButton']")).Click();

令人讨厌的是,试​​图修复问题是困难的,好像我在我的本地机器上运行测试,在调试它通过。另外,如果我通过构建机器上的NUNIT运行程序运行它,我正在运行测试,它也会通过。在使用Teamcity时,它似乎只是作为我们的自动构建运行过程的一部分而失败。就像我说的,这个问题已经好几个月了,并且唯一改变的是selenium webdriver套件。

我之前遇到过这个问题,在调试时,当调用Click()代码行时,Firefox似乎锁定了,只有停止测试才能让Firefox继续运行。这里有很多建议,包括修改webdriver源码?如果可能的话,如果有其他人可以提供任何建议,我不想沿着这条路走下去。

c# selenium selenium-webdriver nunit teamcity
13个回答
19
投票
new FirefoxDriver(new FirefoxBinary(),new FirefoxProfile(),TimeSpan.FromSeconds(180));

使用上面的代码行启动浏览器。它对我有用。


0
投票

将Selenium.WebDriver.ChromeDriver从2.40.0更改为2.27.0对我来说没问题


0
投票

就我而言,问题出在Click()上。发布我到目前为止的解决方法:

我有一个Selenium测试,当它作为Jenkins作业的一部分在vSphere中托管的节点上运行并通过RDP管理时会失败。经过一些故障排除后,如果远程桌面已连接并聚焦,则会成功,但如果远程桌面断开连接或甚至最小化,则会失败。

作为一种解决方法,我通过vSphere Console而不是RDP进行了登录,然后即使在关闭vSphere之后,测试也不再失败。这是一种解决方法,但我必须要小心,永远不要通过RDP登录,并且始终只能通过vSphere控制台进行管理。


0
投票

SendKeys() and Remote Desktop已经过时了。

你现在可以使用new FirefoxDriver(binary, profile, timeSpan)代替。

还有一个new FirefoxDriver(FirefoxDriverService.CreateDefaultService(), FirefoxOptions options, TimeSpan commandTimeout),它确实有效。但它没有记录,你需要手动指定new FirefoxDriver(string geckoDriverDirectory, FirefoxOptions options, TimeSpan commandTimeout),即使它已经在geckoDriverDirectory


0
投票

我们遇到了同样的问题。在我们的例子中,浏览器被登录弹出窗口(Windows身份验证)阻止,因此在60秒后不会返回。为Chrome帐户运行的Windows帐户添加正确的访问权限解决了问题。


-1
投票

对于ChromeDriver,下面对我有用:

Path

Selenium 3.11版,ChromeDriver 2.37


17
投票

我有一个类似的问题,使用Chrome驱动程序(v2.23)/通过TeamCity运行测试。我可以通过在Chrome选项中添加“no-sandbox”标记来解决此问题:

var options = new ChromeOptions();
options.AddArgument("no-sandbox");

我不确定FF驱动程序是否有类似的选项。根据我的理解,该问题与TeamCity在SYSTEM帐户下运行Selenium有关。


13
投票

我几个月前第一次遇到这个问题(也是在click()命令上),从那以后它一直是我的问题。这似乎是.NET Selenium绑定的某种问题。这个关于IE驱动程序的人的博客文章有助于解释发生的事情:

http://jimevansmusic.blogspot.com/2012/11/net-bindings-whaddaymean-no-response.html

不幸的是,这个问题似乎没有真正的解决方案。每当这个问题提交给Selenium开发人员(see here)时,这是一个typical response

我们需要一个可重现的场景,必须包含一个示例页面或指向公共站点页面的链接,以便重现问题。

如果您能够提交一致且可重复的测试用例,那么这可能非常有助于将此错误保持良好状态。

也就是说,也许你可以在此期间尝试这种解决方法。如果您尝试使用click()的HTML按钮具有包含Javascript的onclick属性,请考虑使用JavascriptExecutor直接执行该代码,而不是调用click()命令。我发现直接执行onclick Javascript允许我的一些测试通过。


3
投票

在我的情况下,我的按钮的类型是submit而不是button,我将Click更改为Sumbit然后每个工作都很好。像下面的东西,

来自driver.FindElement(By.Id("btnLogin")).Click();

driver.FindElement(By.Id("btnLogin")).Submit();

顺便说一句,我已经尝试过这篇文章中的所有答案但不适合我。


3
投票

有类似的问题。尝试在驱动程序的构造函数中设置更多时间 - 添加例如。

var timespan = TimeSpan.FromMinutes(3);

var driver = new FirefoxDriver(binary, profile, timeSpan);

2
投票

我认为当您尝试访问您的Web驱动程序对象后会出现此问题

1)窗口已关闭,您尚未切换到父级

2)您切换到一个尚未准备好的窗口,并且在您切换后已更新

等待windowhandles.count成为你所期待的并没有考虑到页面内容也没有考虑document.ready。我还在寻找解决这个问题的方法


2
投票

在我的情况下,这是因为我删除了chrome更新文件夹。重新安装Chrome后,它工作正常。


1
投票

问题是Click()的评估超过你的构建环境..你可能想要深入了解Click()上发生的事情。

另外,尝试为qazxsw poi添加Retries,因为根据网络速度等,有时评估需要更长的时间


1
投票

在我的情况下,我发现在我们的团队构建服务器中发生了这个错误。这些测试适用于我们当地的开发机器。

问题是目标网站未在构建服务器上正确配置,因此无法正确打开浏览器。

我们使用的是Chrome驱动程序,但我不确定这会有所不同。

© www.soinside.com 2019 - 2024. All rights reserved.