簡體   English   中英

Webdriver:java.net.BindException:地址已在使用中:connect

[英]Webdriver: java.net.BindException: Address already in use: connect

在運行webdriver時,運行3分鍾后,我收到以下異常並且Webdriver崩潰。

我只使用一個webdriver實例和一個FirefoxDriver配置文件。

Exception in thread "main" org.openqa.selenium.WebDriverException:
java.net.BindException: Address already in use: connect
System info: os.name: 'Windows XP', os.arch: 'x86', os.version: '5.1',
java.version: '1.6.0_18'
Driver info: driver.version: remote
        at
org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:
341)
        at
org.openqa.selenium.firefox.FirefoxDriver.execute(FirefoxDriver.java:
234)
        at
org.openqa.selenium.remote.RemoteWebDriver.findElements(RemoteWebDriver.java:
173)
        at
org.openqa.selenium.remote.RemoteWebDriver.findElementsByXPath(RemoteWebDriver.java:
231)
        at org.openqa.selenium.By$6.findElements(By.java:200)
        at
org.openqa.selenium.remote.RemoteWebDriver.findElements(RemoteWebDriver.java:
158)

Caused by: java.net.BindException: Address already in use: connect
        at java.net.PlainSocketImpl.socketConnect(Native Method)
        at java.net.PlainSocketImpl.doConnect(Unknown Source)
        at java.net.PlainSocketImpl.connectToAddress(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.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:
123)
        at
org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:
133)
        at
org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:
149)
        at
org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:
108)
        at
org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:
415)
        at
org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:
641)
        at
org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:
211)
        at
org.openqa.selenium.firefox.internal.NewProfileExtensionConnection.execute(NewProfileExtensionConnection.java:
125)
        at org.openqa.selenium.firefox.FirefoxDriver
$LazyCommandExecutor.execute(FirefoxDriver.java:341)
        at
org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:
328)
        ... 11 more 

您的出站端口已用完。 這意味着您在兩分鍾內就完成了數千個出站連接。 解決方案:使用連接池,或減慢程序速度。

我在一組機器中遇到了這個問題,其中一些運行Win2003,一些運行Windows7,許多運行Linux。 我發現關閉所有java進程並重新啟動有一點幫助,特別是在結束運行java進程很多天之后。 並且, 在MSDN上避免TCP / IP端口耗盡的原因是 ,在Win2003計算機上運行獨立的selenium網格作為集線器角色, MaxUserPort10000 (默認值為5000的兩倍), TcpTimedWaitDelay30 (最小值)。 更改后重新啟動 - 按照MSDN上的說明進行操作。

Windows“netstat -b”命令在Win2003機器上非常有用,以確認打開了數十個和幾十個tcp / ip連接(端口4444和5555); 那些顯然是Selenium Grid(v2)系統的一部分。

在Java中,我使用driver.quit(); 在每種測試方法的最后。 我嘗試了driver.close()並且無法連續運行多個測試。

我現在可以運行250個測試,在Hub的java控制台上顯示0個異常。

如果你的情況像我的,你在哪里

  1. 開放端口1
  2. 連接到機器
  3. ??
  4. 關閉端口1
  5. 開放端口1
  6. 連接到不同的機器

嘗試添加socket.setSoLinger(true, 0); 直接在socket.close();之前socket.close();

像這樣:

socket.setSoLinger(true, 0);
socket.close();

這會強制操作系統釋放套接字,而不是將其置於TIME_WAIT狀態。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM