0

Я установил небольшой набор тестов с geb, все отлично работает с chrome и firefox, но теперь я хочу расширить браузеры, которые я выполняю тесты с IE, и тесты всегда сбой из-за оставшихся cookie из предыдущих тестов (я все еще зарегистрировался после выполнения теста входа)deleteAllCookies или cleanCookie вызывает UnreachableBrowserException при использовании InternetExplorerDriver

Для загрузки IEDriver я использую webdrivermanager from bonigarcia, который выполняет версию 2.53.1.0 InternetExplorerDriver.

Отрывок из моего GebConfig:

environments { 
    ie { 
     InternetExplorerDriverManager.getInstance().setup(Architecture.x32) 
     driver = { new InternetExplorerDriver() } 
    } 

Моя тестовая установка выглядит следующим образом:

def setup() { 
    resetBrowser() 
    Database.resetDatabase() 
} 

Метод resetBrowser() от Геба и делает это:

void resetBrowser() { 
    if (_browser?.config?.autoClearCookies) { 
     _browser.clearCookiesQuietly() 
    } 
    _browser = null 
} 

И вот мой (также пробовал без него, ничего не менял):

def cleanup() { 
    CachingDriverFactory.clearCacheAndQuitDriver() 
} 

resetBrowser() должен удалить файлы cookie, но я читаю, что будут удалены только файлы cookie из текущего домена. Поэтому я подумал добавить что-то вроде browser.clearCookies(browser.baseUrl) или browser.clearCookies("http://localhost:8080/") раньше, после или вместо resetBrowser() должен работать. Но как только я добавить эту строку, то IEDriver перестает работать со следующим исключением (то же самое исключение, когда я использую driver.manage().deleteAllCookies()):

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

Ошибка, которую вы видите, может быть связана с тем, что вы покидаете драйвер после каждого теста, который обычно не является необходимым и расточительным, поскольку это означает, что для каждого теста необходимо запустить новый браузер. Могу ли я спросить, почему вы называете 'CachingDriverFactory.clearCacheAndQuitDriver()' из 'cleanup()'? Выход из драйвера очистит все файлы cookie, так как новый браузер будет иметь новый, чистый сеанс, поэтому и отказ, и ручная очистка файлов cookie также не нужны. Где именно вы размещаете вызовы 'browser.clearCookies()'? В 'cleanup()' или в 'setup()'? Или где-то совсем другое? – erdi

+0

'' 'CachingDriverFactory.clearCacheAndQuitDriver()' '' не проблема, по крайней мере, это не вызывает этого исключения, я также провел тесты без него -> такое же поведение! '' 'resetBrowser()' '' - это метод из geb (я добавлю его к вопросу). Но то, что вы пишете, отчасти верно. Только в Chrome и Firefox у меня есть чистая сессия после '' 'quit()' '' или '' 'cleanCookies()' ''! IE всегда помнит предыдущую сессию! : -/ –

+0

И я попытался разместить '' 'browser.clearCookies()' '' до, после и вместо '' 'resetBrowser()' '' –

ответ

1

Моя проблема не была, что печенье не удаляются, это было то, что LocalStorage не очищается!

Для очистки LocalStorage Геб не предлагает никакой функциональности пока нет, но это может быть достигнут с помощью следующего метода, который может быть вызван в рутине setup():

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 
} 

предложение использовать интерфейс Webstorage из WebDriver насколько я и не знаю, пока InternetExplorerDriver не реализует этот интерфейс!