Selenium错误-到远程WebDriver的HTTP请求在60秒后超时


85

我已经使用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时,它似乎只是作为我们自动构建运行过程的一部分而失败。就像我说的那样,这已经运行了好几个月了,唯一改变的是硒webdriver工具包。

在调试期间以及Click()调用一行代码之前,我都遇到了这个问题,Firefox似乎已锁定,只有停止测试才能使Firefox继续运行。这里有很多建议,包括修改webdriver源代码?如果有其他人可以提出任何建议,我希望不要走那条路。


在使用此设置的几个独立项目中,我们遇到了完全相同的问题,但仍然没有解决方法。我们最好的选择是降级到WebDriver和Firefox程序集的旧版本。我们也不知道此行为是由WebDriver还是Firefox引起的。
Dio F

Answers:


23

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

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

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


这也解决了我的问题。经过数月的尝试,我再也无法运行chrome测试了。感谢fightc2
Etienne

1
我的代码在IIS托管的env中运行良好,并突然停止,但仍在我的单元测试中起作用。添加此行使其在IIS env中可以再次使用。谢谢!
传奇'18

1
我将其视为var options = new ChromeOptions(); options.AddArgument("--no-sandbox");在C#版本Webdriver 3.14中现在可以 工作。
moto_geek

20
new FirefoxDriver(new FirefoxBinary(),new FirefoxProfile(),TimeSpan.FromSeconds(180));

使用以上代码行启动浏览器。它为我工作。


固定为我们。运行仅创建FF驱动程序且仅执行其他操作的基本脚本时,60秒的超时可以100%地起作用。当运行我们的资源繁重的脚本时(在打开FF之前立即打开与数据库/读取/写入/连接的连接),超时60会导致大约50%的时间失败。将超时增加到3分钟可以解决此问题。似乎Webdriver只需要多一点时间就可以对引擎进行预热。
KayakinKoder

13

我几个月前(也是在click()命令中)第一次遇到此问题,此后一直是我的问题。.NET Selenium绑定似乎存在某种问题。IE驱动程序工作人员的这篇博客文章有助于解释正在发生的事情:

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

不幸的是,似乎没有一个真正的解决方案。每当向Selenium开发人员提出此问题时(请参见此处),这都是典型的响应

我们需要一种可重现的方案,该方案必须包含示例页面或指向可以复制该问题的公共网站页面的链接。

如果您能够提交可重复生成的一致的测试用例,则可以使此错误永久消失,这将非常有帮助。

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


9

Firefox也有同样的问题。我切换到带有选项的Chrome,此后一切都很好。

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

 ChromeDriver driver = new ChromeDriver(ChromeDriverService.CreateDefaultService(), options, TimeSpan.FromMinutes(3));
 driver.Manage().Timeouts().PageLoad.Add(System.TimeSpan.FromSeconds(30));

我可能在这里弄错了,但似乎最后一行没有效果。PageLoad本身就是一个TimeSpan,而.TimeSpan上的.Add是一个纯函数,它不会修改PageLoad,它只是返回一个新的TimeSpan,而这个新的TimeSpan会被丢弃。
杰森·里奇

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);

嗨,bewu,会采用以下格式吗?driver.Manage()。Timeouts()。ImplicitlyWait(TimeSpan.FromSeconds(5));
弥敦道

4
不,不是此等待隐式等待与查找元素相关联。当它等待请求继续进行时,您需要更改default(60sec)驱动程序超时(如果我没记错的话)。无论如何,您都必须找到设置FF驱动程序构造函数的行,并在其中添加更多属性或更改超时。类似于:driver = new FirefoxDriver(new FirefoxBinary(), new FirefoxProfile(path to your profile), TimeSpan.FromMinutes(3));
Bart Wojtala 2014年

2
对于ChromeDriver,它看起来像driver = new ChromeDriver(service, chromeDriverOptions, TimeSpan.FromMinutes(3));
redwards510 '16

2

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

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

2)您切换到一个尚未准备好并且自切换以来已更新的窗口

等待windowhandles.count是您期望的结果,既不会考虑页面内容,也不会考虑document.ready。我仍在寻找解决这个问题的方法


2

就我而言,这是因为我删除了chrome更新文件夹。重新安装chrome后,它可以正常工作。


1

问题是Click()对构建环境的超时评估。您可能想深入了解发生的情况Click()

另外,请尝试添加“重试”,Click()因为有时评估会花费较长时间,具体取决于网络速度等。


嗨,重试选项将无法工作,因为浏览器只是锁定了。只有停止测试,浏览器才能继续。
弥敦道

1

就我而言,我发现此错误发生在我们的团队构建服务器中。测试在我们本地的开发机器上进行。

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

我们使用的是chrome驱动程序,但不确定是否会有所作为。


1

就我而言,问题在于SendKeys()和Remote Desktop。发布到目前为止的解决方法:

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

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


0

我可以将Selenium.WebDriver.ChromeDriver从2.40.0更改为2.27.0


0

new FirefoxDriver(binary, profile, timeSpan)已经过时。

您现在可以new FirefoxDriver(FirefoxDriverService.CreateDefaultService(), FirefoxOptions options, TimeSpan commandTimeout)改用。

还有一个new FirefoxDriver(string geckoDriverDirectory, FirefoxOptions options, TimeSpan commandTimeout),它确实有效。但这是未记录的,geckoDriverDirectory即使已经在中,您也需要手动指定Path


0

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


0

啊!今天在macOS上遇到了这个问题,问题很简单-弹出窗口提示安装新的Appium远程CI构建服务器上显示版本。

只需VNC,然后单击“稍后安装”即可修复它。


0

就我而言,以上答案均无法完全解决我的问题。我最终使用(no-sandbox)模式,具有延长的超时时间(driver = new RemoteWebDriver(new Uri("http://localhost:4444/wd/hub"), capability, TimeSpan.FromMinutes(3));)和页面加载超时(driver.Manage().Timeouts().PageLoad.Add(System.TimeSpan.FromSeconds(30));)的连接,所以现在我的代码如下所示:

    public IWebDriver GetRemoteChromeDriver(string downloadPath)
    {
        ChromeOptions chromeOptions = new ChromeOptions();
        chromeOptions.AddArguments(
            "start-maximized",
            "enable-automation",
            "--headless",
            "--no-sandbox", //this is the relevant other arguments came from solving other issues
            "--disable-infobars",
            "--disable-dev-shm-usage",
            "--disable-browser-side-navigation",
            "--disable-gpu",
            "--ignore-certificate-errors");
        capability = chromeOptions.ToCapabilities();

        SetRemoteWebDriver();
        SetImplicitlyWait();
        Thread.Sleep(TimeSpan.FromSeconds(2));
        return driver;
    }
    
    private void SetImplicitlyWait()
    {
        driver.Manage().Timeouts().PageLoad.Add(TimeSpan.FromSeconds(30));
    }


    private void SetRemoteWebDriver()
    {
        driver = new RemoteWebDriver(new Uri("http://localhost:4444/wd/hub"), capability, TimeSpan.FromMinutes(3));
    }

但是,正如我提到的,上述方法都不能解决我的问题,我不断收到错误消息,并且多个chromedriver.exe和chrome.exe进程处于活动状态(大约10个chromedriver和大约50个chrome)。

因此,在某处我读到,在处置驱动程序之后,我应该等待几秒钟,然后再开始下一个测试,因此我在处置方法中添加了以下行:

    driver?.Quit();
    driver?.Dispose();
    Thread.Sleep(3000);

通过这种睡眠修改,我不再遇到超时错误,并且没有不必要地打开chromedriver.exe和chrome.exe进程。

我希望我能够像我一样长期帮助那些在这个问题上苦苦挣扎的人。


0

尝试在Windows服务器上运行带有计划任务的无头ChromeDriver时遇到相同的异常(无人值守)。为我解决的是以用户“ Administrators ”的身份运行任务(请注意末尾的S)。从任务“条件”选项卡的“任何连接”中选择了我也所做的操作(不知道是否相关)。


-1

对于ChromDriver,以下对我有用:

string chromeDriverDirectory = "C:\\temp\\2.37";
 var options = new ChromeOptions();
 options.AddArgument("-no-sandbox");
 driver = new ChromeDriver(chromeDriverDirectory, options, 
 TimeSpan.FromMinutes(2));

硒版本3.11,ChromeDriver 2.37

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.