0

我在我的硒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多個

回答

0

你可以做一對夫婦的調試輸出? 即

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從不打印 –

0

這裏是解決你的問題:

我沒有看到任何錯誤這樣在你的代碼,但錯誤堆棧跟蹤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

2

我們的安全部門引入了阻止訪問geckodriver.exe執行的策略。這是通過嘗試從cmd運行來識別的。不知道爲什麼我沒有在IDE中獲得有意義的錯誤(被組策略阻止),我確實在chrome和IE中得到了這個錯誤。爲了使用驅動程序,它需要保存在程序文件中,雖然這可能是特定於我的情況。如果你得到Geckodriver的這個錯誤,我會建議嘗試從cmd執行它,看看是否有政策問題。