Я установил небольшой набор тестов с 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
Ошибка, которую вы видите, может быть связана с тем, что вы покидаете драйвер после каждого теста, который обычно не является необходимым и расточительным, поскольку это означает, что для каждого теста необходимо запустить новый браузер. Могу ли я спросить, почему вы называете 'CachingDriverFactory.clearCacheAndQuitDriver()' из 'cleanup()'? Выход из драйвера очистит все файлы cookie, так как новый браузер будет иметь новый, чистый сеанс, поэтому и отказ, и ручная очистка файлов cookie также не нужны. Где именно вы размещаете вызовы 'browser.clearCookies()'? В 'cleanup()' или в 'setup()'? Или где-то совсем другое? – erdi
'' 'CachingDriverFactory.clearCacheAndQuitDriver()' '' не проблема, по крайней мере, это не вызывает этого исключения, я также провел тесты без него -> такое же поведение! '' 'resetBrowser()' '' - это метод из geb (я добавлю его к вопросу). Но то, что вы пишете, отчасти верно. Только в Chrome и Firefox у меня есть чистая сессия после '' 'quit()' '' или '' 'cleanCookies()' ''! IE всегда помнит предыдущую сессию! : -/ –
И я попытался разместить '' 'browser.clearCookies()' '' до, после и вместо '' 'resetBrowser()' '' –