Отказано в соединении с Java Selenium Webdriver
Я получаю слишком общую ошибку соединения, отказанную на моем селене. Тот же код выполнялся несколько недель назад.
Я читал в кругах через существующие посты и пытался обновить geckodriver и FireFox безрезультатно. Я могу запустить этот же код на другом компьютере, на котором установлены те же версии драйвера, браузера и библиотек и т. Д. Как найти причину, характерную для этого компьютера? ошибка ниже.
Отладка 1 отладка 2 отладка 3
Exception in thread "main" org.openqa.selenium.WebDriverException: org.apache.http.conn.HttpHostConnectException: Connect to localhost:28379 [localhost/127.0.0.1, localhost/0:0:0:0:0:0:0:1] failed: Connection refused: connect Build info: version: 'unknown', revision: 'unknown', time: 'unknown' System info: host: 'LT9LTDRC2', ip: '10.130.3.15', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_131' Driver info: driver.version: Gecko_Driver
at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:91)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:637)
at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:250)
at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:236)
at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:137)
at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:191) at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:108) at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:137) at seleniumPrograms.Gecko_Driver.main(Gecko_Driver.java:13)
Caused by: org.apache.http.conn.HttpHostConnectException: Connect to localhost:28379 [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:159)
at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:359)
at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:381)
at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:237) at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:185) at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89)
at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:111) at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:72)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:56)
at org.openqa.selenium.remote.internal.ApacheHttpClient.fallBackExecute(ApacheHttpClient.java:139)
at org.openqa.selenium.remote.internal.ApacheHttpClient.execute(ApacheHttpClient.java:87)
at org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:343)
at org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:159)
at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:142)
at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:82) ... 8 more
Caused by: java.net.ConnectException: Connection refused: connect
at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at org.apache.http.conn.socket.PlainConnectionSocketFactory.connectSocket(PlainConnectionSocketFactory.java:75)
at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:142) ... 23 more
И я запускаю этот код даже в следующем базовом коде.
enter code here
package seleniumPrograms;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
public class Gecko_Driver {
public static void main(String[] args) {
System.out.println("Debug 1");
DesiredCapabilities capabilities=DesiredCapabilities.firefox();
System.out.println("Debug 2");
capabilities.setCapability("marionette", true);
System.out.println("Debug 3");
WebDriver driver = new FirefoxDriver(capabilities);
System.out.println("Debug 4");
driver.get("http://www.google.com");
driver.manage().window().maximize();
driver.quit();
}
}
Пример с хромом.
@Test
public void testGoogleSearch() throws InterruptedException {
// Optional, if not specified, WebDriver will search your path for chromedriver.
System.setProperty("webdriver.chrome.driver", "C:\\chromedriver_win32\\chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.get("http://www.google.com/xhtml");
Thread.sleep(5000); // Let the user actually see something!
WebElement searchBox = driver.findElement(By.name("q"));
searchBox.sendKeys("ChromeDriver");
searchBox.submit();
Thread.sleep(5000); // Let the user actually see something!
driver.quit();
}
Трассировка сбоя:
org.openqa.selenium.WebDriverException: истекло время ожидания запуска сервера драйверов. Информация о сборке: версия: "неизвестно", ревизия: "неизвестно", время: "неизвестно" Системная информация: хост: "LT9LTDRC2", ip: "192.168.1.6", os.name: "Windows 10", os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_131'Информация о драйвере: driver.version: Gecko_Driver в org.openqa.selenium.remote.service.DriverService.waitUntilAvailable(DriverService.java:193) в org.openqa.selenium.remote.service.DriverService.start(DriverService.java:181) в org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:78) в org.openqrem.selen..RemoteWebDriver.execute(RemoteWebDriver.java:637) по адресу org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:250) по адресу org.openqa.selenium.remote.RemoteWebDriver.WartDriver.Wart.Wart.Wart.Wart.Wart.Wart.Wart.Wart.Wart.Wart.Wart.Wart.Wart.Wart.Wart.WebServer. org.openqa.selenium.remote.RemoteWebDriver.(RemoteWebDriver.java:137) в org.openqa.selenium.chrome.ChromeDriver.(ChromeDriver.java:184) в org.openqa.selenium.chrome.ChromeDver.:171) в org.openqa.selenium.chrome.ChromeDriver.(ChromeDriver.java:124) в seleniumPrograms.Gecko_Driver.testGoogleSearch(Gecko_Driver.java:16) в sun.reflect.NativeMethodAccessorImpl.invoke0(собственный метод) в исходном исходном ответе at sun.reflect.DelegatingMethodAccessorImpl.invoke(неизвестный источник) по адресу java.lang.reflect.Method.invoke(неизвестный источник) по адресу org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50).internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) в org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) в org.junit.internal.runnostate(InvokeMethod.java:17) в org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) в org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.jlass.jun4.java.java.78): runChild (BlockJUnit4ClassRunner.java:57) в org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) в org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) в org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) в org.junit.runners.ParentRunner.pl (ParentRunner.java:58) в org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) в org.junit.runners.ParentRunner.run(ParentRunner.java:363) в org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86) в org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) в org.eclipse.jdt.intern.jun.RemoteTestRunner.runTests(RemoteTestRunner.java:459) в org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:678) в org.eclipse.jTrun.un(RemoteTestRunner.java:382) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192) Причина: org.openqa.selenium.net.UrlChecker$TimeoutException: истекло время ожидания ожидания [ HTTP: // локальный: 31675 / стат us], доступный через 20002 мс по адресу org.openqa.selenium.net.UrlChecker.waitUntilAvailable(UrlChecker.java:107) по адресу org.openqa.selenium.remote.service.DriverService.waitUntilAvailable(DriverService.java:190) Еще 33. Причина: com.google.common.util.concurrent.UncheckedTimeoutException: java.util.concurrent.TimeoutException at com.google.common.util.concurrent.SimpleTimeLimiter.callWithTimeout(SimpleTimeLimiter.java:140) в org.open.selenium.net.UrlChecker.waitUntilAvailable(UrlChecker.java:80) ... еще 34 причины: java.util.concurrent.TimeoutException в java.util.concurrent.FutureTask.get(Неизвестный источник) в com.google.common.util.concurrent.SimpleTimeLimiter.callWithTimeout(SimpleTimeLimiter.java:128) ... еще 35
2 ответа
Наш отдел безопасности ввел политику, которая блокировала доступ к выполнению geckodriver.exe. Это было идентифицировано при попытке запустить из cmd. Не уверен, почему я не получил значимую ошибку в IDE (заблокированную групповой политикой) для gecko, я получил эту ошибку для chrome и IE. Чтобы использовать драйвер, его нужно было сохранить в программных файлах, хотя это может быть связано с моей ситуацией. Если вы получите эту ошибку для Geckodriver, я бы предложил попробовать выполнить ее из cmd, чтобы увидеть, есть ли проблема в политике.
Вот решение вашего вопроса:
Я не вижу никакой ошибки как таковой в вашем коде, но трассировка стека ошибок HttpHostConnectException
говорит все это.
Выполните следующие шаги:
- Я не вижу необходимости использовать
throws InterruptedException
Вы можете рассмотреть возможность его удаления. - В соответствии с передовой практикой старайтесь держать гекодривера в удобных местах:
C:\\your_directory
, Избегайте использования имен каталогов с
Temp
,Хотя вы приняли помощь
DesiredCapabilities
Класс, вы не прошли его, пока инициировали экземпляр драйвера. Вы должны делать:WebDriver driver = new FirefoxDriver(capabilities);
Очистите кеш браузера Mozilla Firefox.
- В диспетчере задач Windows вручную убейте все запущенные экземпляры geckodriver.exe
- Вам может потребоваться запустить CCleaner, чтобы избежать нежелательных вещей.
- Перезагрузите машину.
- Выполните свой тест. Это должно работать хорошо.
В конце вашего тестового шага позвоните
driver.quit()
чтобы препятствовать тому, чтобы экземпляры geckodriver болтались.Вот ваш собственный рабочий блок кода, добавляющий
System.setProperty
линия:System.setProperty("webdriver.gecko.driver", "C:\\your_directory\\geckodriver.exe"); System.out.println("Debug 1"); DesiredCapabilities capabilities=DesiredCapabilities.firefox(); System.out.println("Debug 2"); capabilities.setCapability("marionette", true); System.out.println("Debug 3"); WebDriver driver = new FirefoxDriver(capabilities); System.out.println("Debug 4"); driver.get("http://www.google.com"); driver.manage().window().maximize(); driver.quit();
Дайте мне знать, если это поможет вам.
Здесь я столкнулся с той же ошибкой. После перезагрузки системы код работал нормально. Моя проблема заключалась в том, что мой код оставил некоторые процессы открытыми в конце, и они использовали много оперативной памяти. Попробуйте запустить:
pkill geckodriver
pkill firefox
pkill selenium
А затем снова запустите свой код.