org.openqa.selenium.remote.UnreachableBrowserException: Ошибка связи с удаленным браузером. Возможно, он умер с ChromeDriver и Selenium
Я запускаю кучу тестов каждый час, используя selenium-java 3.12.0; TestNG; Селеноид с докером, Дженкинс. Иногда (примерно в 1 из 10 случаев) я получаю сообщение об ошибке:
org.openqa.selenium.remote.UnreachableBrowserException: Error communicating with the remote browser. It may have died.
Build info: version: '3.6.0', revision: '6fbf3ec767', time: '2017-09-27T15:28:36.4Z'
System info: host: 'autotest.rvkernel.com', ip: '94.130.165.217', os.name: 'Linux', os.arch: 'amd64', os.version: '4.13.0-26-generic', java.version: '1.8.0_181'
Driver info: driver.version: RemoteWebDriver
Capabilities [{mobileEmulationEnabled=false, hasTouchScreen=false, platform=LINUX, acceptSslCerts=false, acceptInsecureCerts=false, webStorageEnabled=true, browserName=chrome, takesScreenshot=true, javascriptEnabled=true, platformName=LINUX, setWindowRect=true, unexpectedAlertBehaviour=, applicationCacheEnabled=false, rotatable=false, networkConnectionEnabled=false, chrome={chromedriverVersion=2.39.562737 (dba483cee6a5f15e2e2d73df16968ab10b38a2bf), userDataDir=/tmp/.org.chromium.Chromium.gURWcu}, takesHeapSnapshot=true, pageLoadStrategy=normal, unhandledPromptBehavior=, databaseEnabled=false, handlesAlerts=true, version=67.0.3396.62, browserConnectionEnabled=false, nativeEvents=true, locationContextEnabled=true, cssSelectorsEnabled=true}]
Session ID: 56c4b100a95d89b3d5702ec8a1a0698a
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:564)
at org.openqa.selenium.remote.RemoteWebElement.execute(RemoteWebElement.java:276)
at org.openqa.selenium.remote.RemoteWebElement.click(RemoteWebElement.java:83)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.openqa.selenium.support.events.EventFiringWebDriver$EventFiringWebElement$1.invoke(EventFiringWebDriver.java:376)
at com.sun.proxy.$Proxy14.click(Unknown Source)
at org.openqa.selenium.support.events.EventFiringWebDriver$EventFiringWebElement.click(EventFiringWebDriver.java:389)
at com.Elements.Element.lambda$click$2(Element.java:99)
at org.openqa.selenium.support.ui.FluentWait.until(FluentWait.java:208)
at com.Elements.Element.click(Element.java:98)
at com.Elements.Element.click(Element.java:78)
at com.pages.landing.social.MailRuRegisterPage.clickRegister(MailRuRegisterPage.java:37)
at RulVulaknTests.authorization.AuthorizationTest.authorizationUserFromMailRU(AuthorizationTest.java:100)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:124)
at org.testng.internal.Invoker.invokeMethod(Invoker.java:571)
at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:707)
at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:979)
at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:125)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:109)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.IllegalArgumentException: Cannot decode response content:
at org.openqa.selenium.remote.http.AbstractHttpResponseCodec.decode(AbstractHttpResponseCodec.java:83)
at org.openqa.selenium.remote.http.AbstractHttpResponseCodec.decode(AbstractHttpResponseCodec.java:44)
at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:158)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:543)
... 28 more
Caused by: org.openqa.selenium.json.JsonException: java.io.EOFException: End of input at line 1 column 1 path $
Build info: version: '3.6.0', revision: '6fbf3ec767', time: '2017-09-27T15:28:36.4Z'
System info: host: 'autotest.rvkernel.com', ip: '94.130.165.217', os.name: 'Linux', os.arch: 'amd64', os.version: '4.13.0-26-generic', java.version: '1.8.0_181'
Driver info: driver.version: RemoteWebDriver
at org.openqa.selenium.json.JsonInput.execute(JsonInput.java:172)
at org.openqa.selenium.json.JsonInput.peek(JsonInput.java:72)
at org.openqa.selenium.json.JsonTypeCoercer.lambda$null$6(JsonTypeCoercer.java:136)
at org.openqa.selenium.json.JsonTypeCoercer.coerce(JsonTypeCoercer.java:122)
at org.openqa.selenium.json.Json.toType(Json.java:62)
at org.openqa.selenium.json.Json.toType(Json.java:52)
at org.openqa.selenium.remote.http.AbstractHttpResponseCodec.decode(AbstractHttpResponseCodec.java:80)
... 31 more
Caused by: java.io.EOFException: End of input at line 1 column 1 path $
at com.google.gson.stream.JsonReader.nextNonWhitespace(JsonReader.java:1401)
at com.google.gson.stream.JsonReader.consumeNonExecutePrefix(JsonReader.java:1576)
at com.google.gson.stream.JsonReader.doPeek(JsonReader.java:534)
at com.google.gson.stream.JsonReader.peek(JsonReader.java:425)
at org.openqa.selenium.json.JsonInput.lambda$peek$0(JsonInput.java:73)
at org.openqa.selenium.json.JsonInput.execute(JsonInput.java:168)
... 37 more
И после этой ошибки все оставшиеся тесты пропускаются.
Версии браузера chrome, с помощью которых я столкнулся с ошибкой - 66, 67.
2 ответа
Это сообщение об ошибке...
org.openqa.selenium.remote.UnreachableBrowserException: Error communicating with the remote browser. It may have died.
... подразумевает, что экземпляр RemoteWebDriver был внезапно закрыт.
Ваши испытания кода помогли бы решить проблему. Возможно, главная проблема может заключаться в следующем:
- Вы упомянули, что вы используете selenium-java 3.12.0, но в журналах трассировки ошибок упоминается selenium-java 3.6.0. Так что, возможно, в этом проекте есть несколько примеров селен-Java. Поэтому вам необходимо убедиться, что ваш проект настроен только с одним набором двоичных файлов selenium-java.
В соответствии с лучшими практиками:
- Обновите Selenium до текущих уровней Версия 3.14.0.
- Обновите ChromeDriver до текущего уровня ChromeDriver v2.41.
- Держите версию Chrome между уровнями Chrome v66-68. ( согласно примечаниям к выпуску ChromeDriver v2.41)
- (Только для WindowsOS) Используйте инструмент CCleaner, чтобы стереть с себя все обязанности ОС до и после выполнения Test Suite.
- (Только для LinuxOS) Освободите и освободите неиспользуемую / кэшированную память в Ubuntu / Linux Mint до и после выполнения вашего Test Suite.
- Если ваша базовая версия веб-клиента слишком старая, удалите ее с помощью Revo Uninstaller и установите последнюю версию GA и выпущенную версию веб-клиента.
Как вы упомянули, каждый месяц запускается несколько тестовых случаев, возможно, есть несколько висящих экземпляров ChromeDriver и Chrome, которые можно просмотреть через список процессов (ОС Linux) или TaskManager (ОС Windows). Вы должны всегда вызывать
driver.quit()
вtearDown(){}
способ изящно закрыть и уничтожить экземпляры WebDriver и Web Client.Если висячие экземпляры WebDriver и Web Browser все еще не устранены, рассмотрите возможность их уничтожения грубой силой. Вы можете найти подробное обсуждение в Selenium: как остановить процесс geckodriver, влияющий на память ПК, без вызова driver.quit()?
Если ваша программа пытается установить TCP-соединения от портов, которые больше 5000, вы можете обратиться к этой статье
Рекомендации
- org.openqa.selenium.remote.UnreachableBrowserException: Ошибка связи с удаленным браузером. Возможно, он умер.
- Получение "Ошибка связи с удаленным браузером. Возможно, он умер". с хромедривером
- IE11: UnreachableBrowserException: ошибка связи с удаленным браузером. Возможно, он умер.
- Исправление WebDriver для UnreachableBrowserException
извините за ответ на очень старые вопросы, но подумал, что это может помочь кому-то еще. Я столкнулся с той же проблемой, и ранее я также думал, что проблема связана с Webdriver, но это не так,
public static final Target EMAIL = Target.the("email")
.locatedBy(("//input[(@id='login-email-input')]"));
И все работало нормально,
actor.attemptsTo(Enter.keyValues("someemail@gmail.com")
.into(EMAIL).thenHit(Keys.TAB));
но я подумал очистить поле ввода, прежде чем вводить новое значение, и заменил строку выше на
actor.attemptsTo(Clear.field(EMAIL));
actor.attemptsTo(Enter.keyValues("someemail@gmail.com")
.into(EMAIL).thenHit(Keys.TAB));
И я получил ту же ошибку. После удаления вновь добавленной строки все стало работать правильно.