Ich habe eine kleine Test-Suite mit geb, alles funktioniert gut mit Chrome und Firefox, aber jetzt wollte ich die Browser zu erweitern ich die Tests mit IE und den Tests immer ausführen fehlgeschlagen wegen verbleibender Cookies von vorherigen Tests (Ich bin nach dem Login-Test noch eingeloggt)deleteAllCookies oder cleanCookie verursacht UnreachableBrowserException bei Verwendung von InternetExplorerDriver
Um den IEDriver zu laden, benutze ich die webdrivermanager from bonigarcia, welche die Version 2.53.1.0 von InternetExplorerDriver ausführt.
Snippet von meinem GebConfig:
environments {
ie {
InternetExplorerDriverManager.getInstance().setup(Architecture.x32)
driver = { new InternetExplorerDriver() }
}
sieht Mein Test-Setup wie folgt aus:
def setup() {
resetBrowser()
Database.resetDatabase()
}
Verfahren resetBrowser()
von Geb und tut dies:
void resetBrowser() {
if (_browser?.config?.autoClearCookies) {
_browser.clearCookiesQuietly()
}
_browser = null
}
Und hier ist mein Aufräumen (auch ohne es versucht, hat nichts geändert):
resetBrowser()
sollte die Cookies löschen, aber ich habe gelesen, dass nur Cookies von der aktuellen Domain gelöscht werden. Also ich dachte, etwas wie browser.clearCookies(browser.baseUrl)
oder browser.clearCookies("http://localhost:8080/")
vor, nach oder anstelle von resetBrowser()
sollte funktionieren. Aber sobald ich diese Zeile hinzufügen, die IEDriver mit der folgenden Ausnahme nicht mehr funktionieren (gleiche Ausnahme ausgelöst, wenn i driver.manage().deleteAllCookies()
verwenden):
org.openqa.selenium.remote.UnreachableBrowserException: Error communicating with the remote browser. It may have died.
Build info: version: '2.53.0', revision: '35ae25b1534ae328c771e0856c93e187490ca824', time: '2016-03-15 10:43:46'
System info: host: 'MiiKEs', ip: '192.168.0.123', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_66'
Driver info: driver.version: RemoteWebDriver
Capabilities [{browserAttachTimeout=0, ie.enableFullPageScreenshot=true, enablePersistentHover=true, ie.forceCreateProcessApi=false, ie.forceShellWindowsApi=false, pageLoadStrategy=normal, ignoreZoomSetting=false, ie.fileUploadDialogTimeout=3000, version=11, platform=WINDOWS, nativeEvents=true, ie.ensureCleanSession=false, elementScrollBehavior=0, ie.browserCommandLineSwitches=, requireWindowFocus=false, browserName=internet explorer, initialBrowserUrl=http://localhost:21317/, javascriptEnabled=true, ignoreProtectedModeSettings=false, enableElementCacheCleanup=true, unexpectedAlertBehaviour=dismiss}]
Session ID: 75c52825-b9e6-4876-a1f9-454b450b839e
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:665)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:701)
at org.openqa.selenium.remote.RemoteWebDriver$RemoteWebDriverOptions.deleteAllCookies(RemoteWebDriver.java:773)
at TestSpec.register test(TestSpec.groovy:84)
Caused by: org.openqa.selenium.WebDriverException: org.apache.http.conn.HttpHostConnectException: Connect to localhost:21317 [localhost/127.0.0.1, localhost/0:0:0:0:0:0:0:1] failed: Connection refused: connect
Build info: version: '2.53.0', revision: '35ae25b1534ae328c771e0856c93e187490ca824', time: '2016-03-15 10:43:46'
System info: host: 'MiiKEs', ip: '192.168.0.123', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_66'
Driver info: driver.version: RemoteWebDriver
at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:91)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:644)
... 3 more
Caused by: org.apache.http.conn.HttpHostConnectException: Connect to localhost:21317 [localhost/127.0.0.1, localhost/0:0:0:0:0:0:0:1] failed: Connection refused: connect
at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:151)
at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:353)
at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:380)
at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:236)
at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:184)
at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:88)
at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110)
at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:184)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:71)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:55)
at org.openqa.selenium.remote.internal.ApacheHttpClient.fallBackExecute(ApacheHttpClient.java:144)
at org.openqa.selenium.remote.internal.ApacheHttpClient.execute(ApacheHttpClient.java:90)
at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:142)
at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:82)
... 4 more
Caused by: java.net.ConnectException: Connection refused: connect
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at org.apache.http.conn.socket.PlainConnectionSocketFactory.connectSocket(PlainConnectionSocketFactory.java:74)
at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:134)
... 17 more
Der Fehler, den Sie sehen, ist möglicherweise darauf zurückzuführen, dass Sie den Treiber nach jedem Test beenden, was normalerweise nicht notwendig und verschwenderisch ist, da ein neuer Browser für jeden Test gestartet werden muss. Darf ich fragen, warum Sie 'CachingDriverFactory.clearCacheAndQuitDriver()' von 'cleanup()' aufrufen? Das Beenden des Treibers löscht alle Cookies, da der neue Browser eine neue, saubere Sitzung hat, so dass sowohl das Beenden als auch das manuelle Löschen der Cookies nicht notwendig ist. Wo genau platzieren Sie die 'browser.clearCookies()' Aufrufe? In 'cleanup()' oder in 'setup()'? Oder irgendwo ganz anders? – erdi
'' 'CachingDriverFactory.clearCacheAndQuitDriver()' '' ist kein Problem, zumindest verursacht es diese Ausnahme nicht, ich habe auch die Tests ohne es durchgeführt -> dasselbe Verhalten! '' 'resetBrowser()' '' ist eine Methode von geb (Ich werde es zur Frage hinzufügen). Aber was Sie schreiben, ist nur teilweise wahr. Nur in Chrome und Firefox habe ich eine saubere Sitzung nach '' 'quit()' '' '' '' 'cleanCookies()' ''! IE erinnert sich immer an die vorherige Sitzung! : -/ –
Und ich habe versucht, '' 'browser.clearCookies()' '' vor, nach und stattdessen '' 'resetBrowser()' '' –