0

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 
+0

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

+0

'' '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! : -/ –

+0

Und ich habe versucht, '' 'browser.clearCookies()' '' vor, nach und stattdessen '' 'resetBrowser()' '' –

Antwort

1

Mein Problem war nicht, dass die Cookies nicht gelöscht werden, es war, dass LocalStorage wird nicht gereinigt!

Zur Reinigung Localstorage Geb keine Funktionalität noch nicht bieten, aber dies kann mit dem folgenden Verfahren erreicht werden, die in der setup() Routine aufgerufen werden kann:

def clearLocalStorage() { 
    //first navigate to any page within the domain to which you want to clear the LocalStorage 
    // baseUrl can be set in 
    go(browser.baseUrl) 
    js.exec("localStorage.clear()") // and then just clear it 
} 

Der Vorschlag, die WebStorage Schnittstelle von WebDriver zu verwenden Soweit ich das verstanden habe ist das nicht möglich bis InternetExplorerDriver diese Schnittstelle nicht implementiert!