Java Selenium Webdriver连接拒绝

问题描述:

我在我的硒webdriver上得到了太常见的连接拒绝错误。相同的代码在几周前执行。Java Selenium Webdriver连接拒绝

我一直在阅读圈子通过现有的职位,并尝试更新geckodriver和FireFox无济于事。我可以在运行相同版本的驱动程序,浏览器和库等的另一台计算机上运行相同的代码。我如何找到特定于此机器的原因?错误在下面。

调试1 调试2 调试3

异常在线程 “主” org.openqa.selenium.WebDriverException:org.apache.http.conn.HttpHostConnectException:连接到本地主机:28379 [本地主机/ 127.0。 0.1,localhost/0:0:0:0:0:0:0:1]失败:连接被拒绝:连接构建信息:版本:'unknown',修订:'unknown',时间:'unknown'系统信息: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.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 .org.openqa.selenium.remote.RemoteWebDriver。(RemoteWebDriver.java: 137)在org.openqa.selenium.firefox.FirefoxDriver。(FirefoxDriver.java:191)at org.openqa.selenium.firefox.FirefoxDriver。(FirefoxDriver.java:108)at org.openqa.selenium.firefox.FirefoxDriver。( (Gecko_Driver.java:13)导致:org.apache.http.conn.HttpHostConnectException:连接到localhost:28379 [localhost/127.0.0.1,localhost/0:0: 0:0:0:0:0:1]失败:连接被拒绝:在org.apache.http.impl.conn处的org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:159)处进行连接。 PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:359)at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:381)at在org.apache.http.impl的org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:185)处提供org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:237)。在org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient。)上的org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:111)上的execchain.RetryExec.execute(RetryExec.java:89)在org.openqa上org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:56)处的org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:72) .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更多原因:java.net.ConnectException:连接被拒绝:在java.net连接.dualStackPlainSocketImpl.waitForConnect(Native Method)at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)at java.net.AbstractPlainSocketImpl在java.net.PlainSocketImpl.connect(未知源)上的.connect(Unknown Source)在java.net.SocksSocketImpl.connect(未知源)在java.net.Socket.connect(未知源)在org.apache.http.conn .socket.PlainConnectionSocketFactory.connectSocket(PlainConnectionSocketFactory.java:75)at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:142)... 23更多

即使下面的基本代码,我也会得到这个结果。

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:超时等待司机服务器开始。 构建信息:版本:'unknown',修订:'unknown',时间:'unknown' 系统信息:主机:'LT9LTDRC2',ip:'192.168.1.6',操作系统名称:'Windows 10',操作系统。 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.RemoteWebDriver.execute(RemoteWebDriver.java:637) at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:250) at org.openqa.se (ChromeDriver.java: 184) 在org.openqa.selenium.chrome.ChromeDriver。(ChromeDriver.java:171) 在org.openqa.selenium.chrome.ChromeDriver。(ChromeDriver.java:124) 在seleniumPrograms.Gecko_Driver.testGoogleSearch(Gecko_Driver。的java:16) 在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法) 在sun.reflect.NativeMethodAccessorImpl.invoke(未知来源) 在sun.reflect.DelegatingMethodAccessorImpl.invoke(未知来源) 在java.lang.reflect中.Method.invoke(未知来源) at org.juni t.runners.model.FrameworkMethod $ 1.runReflectiveCall(FrameworkMethod.java:50) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) at org.junit.runners.model.FrameworkMethod .invokeExplosive(FrameworkMethod.java:47) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) 在org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78) 在org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57) 在org.junit.runners.ParentRunner $ 3.run(ParentRunner。 java:290) at org.junit.runners.ParentRunner $ 1.schedule(ParentRunner.java:71) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) at org.junit.runners.ParentRunner.access $ 000(ParentRunner.java:58) at org.junit.runners.ParentRunner $ 2.evaluate(ParentRunner。 java:268) at org.junit.runners.ParentRunner.run(ParentRunner.java:363) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86) at org。 eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459) at org.eclipse。 jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:678) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192) 引起人:org.openqa.selenium.net。UrlChecker $ TimeoutException:在org.openqa.selenium.net.UrlChecker.waitUntilAvailable(UrlChecker.java:107) org.openqa.selenium.remote.service.DriverService处等待[http://localhost:31675/status] 20002 ms 后超时。 waitUntilAvailable(DriverService.java:190) ... 33更多 引起:com.google.common.util.concurrent.UncheckedTimeoutException:java.util.concurrent.TimeoutException at com.google.common.util.concurrent.SimpleTimeLimiter在java的java.util.concurrent.TimeoutException :.callWithTimeout(SimpleTimeLimiter.java:140) 在org.openqa.selenium.net.UrlChecker.waitUntilAvailable(UrlChecker.java:80) ... 34更 引起。 util.concurrent.FutureTask.get(未知来源) 在com.google.common.util.concurrent.SimpleTimeLimiter.callWithTimeout(SimpleTimeLimiter.java:128) ...... 35多个

你可以做一对夫妇的调试输出? 即

System.out.println("Debug 1"); 
System.out.println("Debug 2"); 
System.out.println("Debug 3"); 

等...所以也许我们能看到应用程序崩溃?

+0

感谢您的快速响应。它在实例化FirefoxDriver() –

+0

System.setProperty(“webdriver.gecko.driver”,“C:\\ Temp \\ Drivers and Libraries \\ geckodriver-v0.16.1-win64 \\ geckodriver.exe”)时失败。 \t System.out.println(“Debug 1”); \t DesiredCapabilities功能= DesiredCapabilities.firefox(); \t System.out.println(“Debug 2”); \t capabilities.setCapability(“marionette”,true); \t System.out.println(“Debug 3”); \t WebDriver driver = new FirefoxDriver(); System.out.println(“Debug 4”); \t driver.get(“http://www.google.com”); \t \t driver.manage()。window()。maximize(); –

+0

调试4从不打印 –

这里是解决你的问题:

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

执行以下步骤:

  1. 我看不出有什么必要使用throws InterruptedException,你可以考虑将其删除。
  2. 按照最佳做法,尽量让geckodriver保持在方便的位置。 C:\\your_directory
  3. 避免使用Temp的目录名称。

  4. 虽然你已经接受DesiredCapabilities类的帮助,但在启动驱动程序实例时还没有通过它。你必须做:

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

  6. 从Windows任务管理器,手动杀了你可能需要运行CCleaner的保留了所有不必要的东西geckodriver.exe
  7. 的所有正在运行的实例。
  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(); 
    

让我知道如果这能帮助你。

+0

谢谢Dev,但不幸的是,在完成所有建议的步骤后,我仍然得到相同的错误。 –

+0

遗憾的是仍然没有改变。我在环境变量中设置了geckodriver,所以我根本不需要这个设置。 –

+0

请在问题区域更新您的当前代码和错误堆栈跟踪,以便进一步分析。谢谢 – DebanjanB

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