Java Selenium Webdriver连接被拒绝

我在我的selenium webdriver上得到了太常见的连接拒绝错误。 几周前,相同的代码正在执行。

我一直在通过现有的post阅读,并尝试更新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.(RemoteWebDriver.java:137) at org.openqa.selenium.firefox.FirefoxDriver.(FirefoxDriver.java:191) at org.openqa.selenium.firefox.FirefoxDriver.(FirefoxDriver.java:108) at org.openqa.selenium.firefox.FirefoxDriver.(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 at 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.openqa.selenium.remote .rmoteWebDriver.execute(RemoteWebDriver.java:637)org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:250)org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:236)at atg.openqa.selenium.remote。 org.openqa.selenium.remote.RemoteWebDriver。(RemoteWebDriver.java:137)org.openqa.selenium.chrome.ChromeDriver。(ChromeDriver.java:184)org.openqa.selenium.chrome.ChromeDriver。(ChromeDriver.java) :171)在org.openqa.sele 位于sun.reflect.NativeMethodAccessorImpl.invoke0(本地方法)的sun.reflect.NativeMethodAccessorImpl.invoke(未知来源)的seleniumPrograms.Gecko_Driver.testGoogleSearch(Gecko_Driver.java:16)中的nium.chrome.ChromeDriver。(ChromeDriver.java:124)在org.junit的org.junit.runners.model.FrameworkMethod $ 1.runReflectiveCall(FrameworkMethod.java:50)的java.lang.reflect.Method.invoke(未知来源)的sun.reflect.DelegatingMethodAccessorImpl.invoke(未知来源) .internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)at org.junit.internal.runners.statements.InvokeMethod.evaluate (InvokeMethod.java:17)org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)org.junit.runners.BlockJUnit4ClassRunner上的org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)。 runChild(BlockJUnit4ClassRunner.java:57)at org.junit.runners.ParentRunner $ 3.run(ParentRunner.j) ava:290)org.junit.runners.ParentRunner $ 1.schedule(ParentRunner.java:71)org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)org.junit.runners.ParentRunner.access $ 000 (ParentRunner.java:58)位于org.eclipse.jdt.internal的org.junit.runners.ParentRunner $ 2.evaluate(ParentRunner.java:268)org.junit.runners.ParentRunner.run(ParentRunner.java:363)位于org.eclipse.jdt.internal.junit.runner的org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)的.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86) 。在org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run的org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:678)的.RemoteTestRunner.runTests(RemoteTestRunner.java:459) (RemoteTestRunner.java:382)org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)引起:org.openqa.selenium.net.UrlChecker $ TimeoutException:超时等待[ HTTP://本地主机:31675 / STAT 我们可以在org.openqa.selenium.net.UrlChecker.waitUntilAvailable(UrlChecker.java:107)的org.openqa.selenium.remote.service.DriverService.waitUntilAvailable(DriverService.java:190)上获得20002 ms后的信息。 .33更多引起:com.google.common.util.concurrent.UncheckedTimeoutException:java.util.concurrent.TimeoutException:com.google.common.util.concurrent.SimpleTimeLimiter.callWithTimeout(SimpleTimeLimiter.java:140)org.openqa .selenium.net.UrlChecker.waitUntilAvailable(UrlChecker.java:80)… 34更多引起:com.google.common上java.util.concurrent.FutureTask.get(未知来源)的java.util.concurrent.TimeoutException .util.concurrent.SimpleTimeLimiter.callWithTimeout(SimpleTimeLimiter.java:128)… 35更多

我们的安全部门引入了一项策略,该策略阻止了对geckodriver.exe执行的访问。 这是通过尝试从cmd运行来识别的。 不知道为什么我没有在IDE中获得有意义的错误(被组策略阻止)为gecko,我确实得到了chrome和IE的这个错误。 为了使用驱动程序,它需要保存在程序文件中,尽管这可能是我的具体情况。 如果Geckodriver出现此错误,我建议尝试从cmd执行它以查看是否存在策略问题。

以下是您的问题的解决方案:

我在你的代码中没有看到任何错误,但是错误堆栈跟踪HttpHostConnectException说明了这一切。

执行以下步骤:

  1. 我没有看到任何使用throws InterruptedException必要性,你可以考虑删除它。
  2. 根据最佳实践,尝试将geckodriver放在方便的位置:例如C:\\your_directory
  3. 避免在Temp使用目录名称。

  4. 虽然您已经获得了DesiredCapabilities类的帮助,但是在启动驱动程序实例时尚未传递它。 你一定在做:

     WebDriver driver = new FirefoxDriver(capabilities); 
  5. 清除Mozilla Firefox浏览器缓存。

  6. 从Windows任务管理器中,手动终止所有正在运行的geckodriver.exe实例
  7. 您可能需要运行CCleaner以防止所有不需要的东西。
  8. 重启你的机器。
  9. 执行你的测试。 它应该运作良好。
  10. 在测试步骤结束时,请调用driver.quit()以防止geckodriver实例悬空。

  11. 这是您自己的工作代码块添加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(); 

如果这有助于您,请告诉我。