Selenium Error - Die HTTP-Anforderung an den Remote-WebDriver ist nach 60 Sekunden abgelaufen

85

Ich benutze Selen seit einigen Monaten, mit denen wir einige unserer internen Testprozesse automatisieren. Die Skripte wurden gut bestanden. Ich habe kürzlich mit FF 27.01 ein Upgrade auf den Web-Treiber C # 2.40.0 durchgeführt und unsere Skripte schlagen jetzt an zufälligen Stellen mit dem folgenden Fehler fehl.

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

Der letzte Fehler, den ich in einer einzigen Codezeile gefunden habe:

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

Das Ärgerliche ist, dass sich der Versuch, das Problem zu beheben, als schwierig erweist, als ob ich den Test auf meinem lokalen Computer ausführen würde. Wenn ich es über den NUNIT-Runner auf der Build-Maschine ausführe, auf der ich den Test ausführe, besteht es ebenfalls. Es scheint nur im Rahmen unseres automatisierten Build-Ausführungsprozesses bei Verwendung von Teamcity zu scheitern. Wie ich bereits sagte, läuft dies seit Monaten einwandfrei, und das einzige, was sich geändert hat, ist das Selen-Webdriver-Kit.

Ich habe dieses Problem bereits beim Debuggen festgestellt, und als eine Click()Codezeile aufgerufen wurde, schien Firefox zu blockieren, und nur das Stoppen des Tests würde es Firefox ermöglichen, fortzufahren. Hier gibt es eine Reihe von Vorschlägen, einschließlich der Änderung der Webdriver-Quelle? Ich möchte diesen Weg möglichst nicht gehen, wenn jemand anderes Vorschläge machen kann.

Nathan
quelle
Wir hatten genau das gleiche Problem in mehreren unabhängigen Projekten, die dieses Setup verwendeten, und haben noch keine Problemumgehung dafür. Am besten haben wir ein Downgrade auf ältere Versionen der WebDriver- und Firefox-Assemblys durchgeführt. Wir wissen auch nicht, ob dieses Verhalten durch WebDriver oder Firefox verursacht wird.
Dio F

Antworten:

23

Ich hatte ein ähnliches Problem mit dem Chrome-Treiber (v2.23) / dem Ausführen der Tests über TeamCity. Ich konnte das Problem beheben, indem ich den Chrome-Optionen das Flag "Keine Sandbox" hinzufügte:

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

Ich bin mir nicht sicher, ob es eine ähnliche Option für den FF-Treiber gibt. Soweit ich weiß, hat das Problem etwas mit TeamCity zu tun, das Selenium unter dem SYSTEM-Konto ausführt.

Combatc2
quelle
Dies löst auch mein Problem. Ich konnte keine Chromtests mehr durchführen, nachdem ich sie monatelang nicht ausprobiert hatte. Vielen Dank combinc2
Etienne
1
Mein Code lief in einer von IIS gehosteten Umgebung einwandfrei und wurde plötzlich gestoppt, funktionierte aber immer noch in meinen Komponententests. Durch Hinzufügen dieser Zeile funktionierte sie wieder in IIS env. Vielen Dank!
Legenden
1
Ich habe es als var options = new ChromeOptions(); options.AddArgument("--no-sandbox");"Jetzt arbeiten" in C # Version Webdriver 3.14 delcared.
Moto_geek
20
new FirefoxDriver(new FirefoxBinary(),new FirefoxProfile(),TimeSpan.FromSeconds(180));

Starten Sie Ihren Browser mit den obigen Codezeilen. Es hat bei mir funktioniert.

user2298124
quelle
Auch für uns behoben. Wenn Sie ein Basisskript ausführen, das gerade einen FF-Treiber und nichts anderes erstellt hat, hat eine Zeitüberschreitung von 60 Sekunden 100% der Zeit funktioniert. Wenn Sie unser ressourcenintensives Skript ausführen, das unmittelbar vor dem Öffnen von FF Verbindungen zu Datenbanken öffnet / liest / schreibt / viel mehr ausführt, würde eine Zeitüberschreitung von 60 in etwa 50% der Fälle zu Fehlern führen. Durch Erhöhen des Timeouts auf 3 Minuten wurde das Problem behoben. Scheint, dass Webdriver nur etwas mehr Zeit benötigt, um den Motor aufzuwärmen.
KayakinKoder
13

Ich bin vor Monaten zum ersten Mal auf dieses Problem gestoßen (auch auf click()Befehl), und seitdem ist es ein Problem für mich. Es scheint ein Problem mit den .NET Selenium-Bindungen zu sein. Dieser Blog-Beitrag des Mannes, der am IE-Treiber arbeitet, ist hilfreich, um zu erklären, was passiert:

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

Leider scheint es keine wirkliche Lösung für dieses Problem zu geben. Wann immer dieses Problem bei den Selenium-Entwicklern angesprochen wurde ( siehe hier ), ist dies eine typische Antwort :

Wir benötigen ein reproduzierbares Szenario, das eine Beispielseite oder einen Link zu einer Seite einer öffentlichen Site enthalten muss, auf der das Problem reproduziert werden kann.

Wenn Sie in der Lage sind, einen konsistent reproduzierbaren Testfall einzureichen, kann dies sehr hilfreich sein, um diesen Fehler endgültig zu beheben.

Vielleicht können Sie diese Problemumgehung in der Zwischenzeit ausprobieren. Wenn die HTML-Schaltfläche, die Sie verwenden möchten, click()ein onclickAttribut enthält, das Javascript enthält, sollten Sie einen JavascriptExecutor verwenden , um diesen Code direkt auszuführen, anstatt den click()Befehl aufzurufen . Ich habe festgestellt, dass durch die onclickdirekte Ausführung von Javascript einige meiner Tests bestanden werden können.

Daniel Charles
quelle
9

Hatte das gleiche Problem mit Firefox. Ich bin mit Optionen auf Chrome umgestiegen und seitdem ist alles in Ordnung.

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));
Lawal
quelle
Ich irre mich hier wahrscheinlich, aber es scheint, dass die letzte Zeile dort keine Wirkung haben wird. PageLoad ist selbst ein TimeSpan, und .Add on TimeSpan ist eine reine Funktion, die PageLoad nicht ändert. Es wird lediglich ein neuer TimeSpan zurückgegeben, der verworfen wird.
Jason Ritchie
3

In meinem Fall ist der Typ meiner Schaltfläche submitnicht buttonund ich ändere das Clickbis Sumbitdahin jede Arbeit gut. So etwas wie unten,

von driver.FindElement(By.Id("btnLogin")).Click();

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

Übrigens, ich habe alle Antworten in diesem Beitrag ausprobiert, arbeite aber nicht für mich.

MichaelMao
quelle
3

Habe ein ähnliches Problem. Versuchen Sie, mehr Zeit im Konstruktor des Treibers einzustellen - fügen Sie z.

var timespan = TimeSpan.FromMinutes(3);

var driver = new FirefoxDriver(binary, profile, timeSpan);
Bart Wojtala
quelle
Hallo bewu, wäre das in dem Format wie unten? driver.Manage (). Timeouts (). ImplicitlyWait (TimeSpan.FromSeconds (5));
Nathan
4
Nein, nicht dieses Warten ImplicitlyWait ist mit dem Finden von Elementen verbunden. Sie müssen das Standard-Treiberzeitlimit (60 Sekunden) ändern, wenn darauf gewartet wird, dass die Anforderung fortgesetzt wird (wenn ich mich nicht irre). Auf jeden Fall müssen Sie eine Zeile finden, in der Sie den Konstruktor des FF-Treibers festlegen und dort weitere Attribute hinzufügen oder das Zeitlimit ändern. So etwas wie:driver = new FirefoxDriver(new FirefoxBinary(), new FirefoxProfile(path to your profile), TimeSpan.FromMinutes(3));
Bart Wojtala
2
für ChromeDriver würde es so aussehendriver = new ChromeDriver(service, chromeDriverOptions, TimeSpan.FromMinutes(3));
redwards510
2

Ich denke, dieses Problem tritt auf, wenn Sie danach versuchen, auf Ihr Webtreiberobjekt zuzugreifen

1) Ein Fenster wurde geschlossen und Sie haben noch nicht zum übergeordneten Fenster gewechselt

2) Sie haben zu einem Fenster gewechselt, das noch nicht fertig war und seit dem Wechsel aktualisiert wurde

Das Warten auf das windowhandles.count, was Sie erwarten, berücksichtigt weder den Seiteninhalt noch document.ready. Ich suche immer noch nach einer Lösung für dieses Problem

Ribbo
quelle
2

In meinem Fall liegt es daran, dass ich den Chrome-Update-Ordner gelöscht habe. Nach der Neuinstallation von Chrome funktioniert es einwandfrei.

gary.zhang
quelle
1

Das Problem ist, dass Sie bei der Auswertung von Click()Zeitüberschreitungen in Ihrer Build-Umgebung möglicherweise untersuchen möchten, worauf es ankommt Click().

Versuchen Sie auch, Wiederholungsversuche für hinzuzufügen, Click()da die Auswertungen gelegentlich länger dauern, abhängig von der Netzwerkgeschwindigkeit usw.

bisschen
quelle
Hallo, die Wiederholungsoption funktioniert nicht, da der Browser nur abstürzt. Nur wenn der Test gestoppt wird, kann der Browser fortfahren.
Nathan
1

In meinem Fall habe ich festgestellt, dass dieser Fehler in unserem Team-Build-Server aufgetreten ist. Die Tests wurden auf unseren lokalen Entwicklungsmaschinen durchgeführt.

Das Problem war, dass die Zielwebsite auf dem Buildserver nicht richtig konfiguriert war und der Browser daher nicht richtig geöffnet werden konnte.

Wir haben den Chrome-Treiber verwendet, aber ich bin mir nicht sicher, ob das einen Unterschied macht.

Sean Tomlins
quelle
1

In meinem Fall lag das Problem bei SendKeys () und Remotedesktop . Posting der Problemumgehung, die ich bisher habe:

Ich hatte einen Selenium-Test, der fehlschlug, wenn er als Teil eines Jenkins-Jobs auf einem in vSphere gehosteten und über RDP verwalteten Knoten ausgeführt wurde. Nach einiger Fehlerbehebung stellte sich heraus, dass es erfolgreich ist, wenn Remotedesktop verbunden und fokussiert ist, aber mit der Ausnahme fehlschlägt, wenn Remotedesktop getrennt oder sogar minimiert wird.

Als Problemumgehung habe ich mich über vSphere Console anstelle von RDP angemeldet, und selbst nach dem Schließen von vSphere ist der Test nicht mehr fehlgeschlagen. Dies ist eine Problemumgehung, aber ich müsste vorsichtig sein, mich niemals über RDP anzumelden und immer nur über vSphere Console zu verwalten.

Sashoalm
quelle
0

Das Ändern des Selenium.WebDriver.ChromeDriver von 2.40.0 auf 2.27.0 ist für mich in Ordnung

John Liao
quelle
0

Das new FirefoxDriver(binary, profile, timeSpan)war veraltet.

Sie können jetzt new FirefoxDriver(FirefoxDriverService.CreateDefaultService(), FirefoxOptions options, TimeSpan commandTimeout)stattdessen verwenden.

Es gibt auch ein new FirefoxDriver(string geckoDriverDirectory, FirefoxOptions options, TimeSpan commandTimeout)und es funktioniert. Es ist jedoch nicht dokumentiert, und Sie müssen es manuell angeben geckoDriverDirectory, obwohl es bereits vorhanden ist Path.

imba-tjd
quelle
0

Wir hatten das gleiche Problem. In unserem Fall wurde der Browser durch ein Anmelde-Popup (Windows-Authentifizierung) blockiert und kehrte nach 60 Sekunden nicht zurück. Das Hinzufügen korrekter Zugriffsrechte zum Windows-Konto, unter dem Chrome ausgeführt wurde, löste das Problem.

Rogier van het Schip
quelle
0

Arrrgh! Dies war heute unter macOS der Fall und das Problem war so einfach wie: Das Popup-Fenster, in dem die Installation der neuen Appium- Version vorgeschlagen wurde, wurde auf dem Remote-CI- Buildserver angezeigt .

Nur VNC'ing dazu und Klicken auf " Später installieren " hat es behoben.

RAM237
quelle
0

In meinem Fall hat keine der obigen Antworten mein Problem vollständig gelöst. Am Ende habe ich den ( no-sandbox) -Modus, die Verbindung mit verlängertem Timeout-Zeitraum ( driver = new RemoteWebDriver(new Uri("http://localhost:4444/wd/hub"), capability, TimeSpan.FromMinutes(3));) und das Timeout für das Laden von Seiten ( driver.Manage().Timeouts().PageLoad.Add(System.TimeSpan.FromSeconds(30));) verwendet. Jetzt sieht mein Code folgendermaßen aus:

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

Aber wie ich bereits erwähnte, löste keine der oben genannten Methoden mein Problem, ich bekam ständig den Fehler und mehrere Prozesse von chromedriver.exe und chrome.exe waren aktiv (~ 10 des chromedriver und ~ 50 des Chrome).

Irgendwo habe ich gelesen, dass ich nach dem Entsorgen des Treibers einige Sekunden warten sollte, bevor ich mit dem nächsten Test beginne. Deshalb habe ich die folgende Zeile hinzugefügt, um die Methode zu entsorgen:

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

Mit dieser Schlafänderung habe ich keinen Timeout-Fehler mehr und es gibt keine unnötig geöffneten Prozesse chromedriver.exe und chrome.exe.

Ich hoffe, ich habe jemandem geholfen, der so lange mit diesem Problem zu kämpfen hat wie ich.

turanszkik
quelle
0

Ich hatte die gleiche Ausnahme, als ich versuchte, einen kopflosen ChromeDriver mit einer geplanten Aufgabe auf einem Windows-Server auszuführen (unbeaufsichtigt). Was es für mich gelöst hat, ist, die Aufgabe als Benutzer " Administratoren " auszuführen (beachten Sie das S am Ende). Was ich auch getan habe (ich weiß nicht, ob es relevant ist), ist die Option "Beliebige Verbindung" auf der Registerkarte "Bedingungen".

SubqueryCrunch
quelle
-1

Für ChromeDriver hat das Folgende für mich funktioniert:

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

Selenium Version 3.11, ChromeDriver 2.37

R2D2
quelle