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.
Antworten:
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.
quelle
var options = new ChromeOptions(); options.AddArgument("--no-sandbox");
"Jetzt arbeiten" in C # Version Webdriver 3.14 delcared.new FirefoxDriver(new FirefoxBinary(),new FirefoxProfile(),TimeSpan.FromSeconds(180));
Starten Sie Ihren Browser mit den obigen Codezeilen. Es hat bei mir funktioniert.
quelle
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 :
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()
einonclick
Attribut enthält, das Javascript enthält, sollten Sie einen JavascriptExecutor verwenden , um diesen Code direkt auszuführen, anstatt denclick()
Befehl aufzurufen . Ich habe festgestellt, dass durch dieonclick
direkte Ausführung von Javascript einige meiner Tests bestanden werden können.quelle
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));
quelle
In meinem Fall ist der Typ meiner Schaltfläche
submit
nichtbutton
und ich ändere dasClick
bisSumbit
dahin 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.
quelle
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);
quelle
driver = new FirefoxDriver(new FirefoxBinary(), new FirefoxProfile(path to your profile), TimeSpan.FromMinutes(3));
driver = new ChromeDriver(service, chromeDriverOptions, TimeSpan.FromMinutes(3));
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 Problemquelle
In meinem Fall liegt es daran, dass ich den Chrome-Update-Ordner gelöscht habe. Nach der Neuinstallation von Chrome funktioniert es einwandfrei.
quelle
Das Problem ist, dass Sie bei der Auswertung von
Click()
Zeitüberschreitungen in Ihrer Build-Umgebung möglicherweise untersuchen möchten, worauf es ankommtClick()
.Versuchen Sie auch, Wiederholungsversuche für hinzuzufügen,
Click()
da die Auswertungen gelegentlich länger dauern, abhängig von der Netzwerkgeschwindigkeit usw.quelle
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.
quelle
In meinem Fall lag das Problem bei SendKeys () und Remotedesktop . Posting der Problemumgehung, die ich bisher habe:
quelle
Das Ändern des Selenium.WebDriver.ChromeDriver von 2.40.0 auf 2.27.0 ist für mich in Ordnung
quelle
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 angebengeckoDriverDirectory
, obwohl es bereits vorhanden istPath
.quelle
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.
quelle
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.
quelle
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.
quelle
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".
quelle
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
quelle