问题 Webdriver:java.net.BindException:地址已在使用中: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 

11458
2017-12-01 01:16


起源

您可以发布问题所在的代码段吗? - javamonkey79
可能重复 WebDriver:executeScript()导致BindException - Bert F


答案:


您的出站端口已用完。这意味着您在两分钟内就完成了数千个出站连接。解决方案:使用连接池,或减慢程序速度。


9
2017-12-01 04:47



我意识到在通过WebDriver测试加载的每个页面上运行Javascript ((JavascriptExecutor)driver).executeScript(javascripthere) 造成这个问题。但是,我需要在被测试的页面上运行Javascript。 - KJW
你这样做,但你不需要测试不切实际的情况。实际客户不会打开数以千计的出站连接。你只是这样做,因为你想让它饱和 服务器。所以答案是使用更多的硬件客户端。 - user207421
不确定你通过连接池做什么。完成使用后如何关闭出站连接? - KJW
对WebDriver一无所知我无法真正回答这个问题,但我会寻找一个close()或disconnect()方法。 - user207421


我在一组机器中遇到了这个问题,其中一些运行Win2003,一些运行Windows7,许多运行Linux。我发现关闭所有java进程并重新启动有点帮助,特别是在结束运行java进程很多天之后。并且,非常重要的是 避免MSDN上的TCP / IP端口耗尽 同 MaxUserPort的 的 10000 (默认值为5000的两倍)和 TcpTimedWaitDelay的 的 三十 (最小)在运行独立的selenium网格作为集线器角色的Win2003机器上。更改后重新启动 - 根据MSDN上的说明。

Windows“netstat -b”命令在Win2003机器上非常有用,以确认打开了数十个和几十个tcp / ip连接(端口4444和5555);那些显然是Selenium Grid(v2)系统的一部分。

在Java中,我使用driver.quit();在每种测试方法的最后。我尝试了driver.close()并且无法连续运行多个测试。

我现在可以运行250个测试,在Hub的java控制台上显示0个异常。


3
2017-09-05 06:02





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

  1. 开放端口1
  2. 连接到机器
  3. ??
  4. 关闭端口1
  5. 开放端口1
  6. 连接到不同的机器

尝试添加 socket.setSoLinger(true, 0); 直接之前 socket.close();

像这样:

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

这会强制操作系统释放套接字,而不是将其放入 TIME_WAIT 州。


1
2017-11-09 19:29



它还强制TCP丢弃飞行中的任何数据,并且它还强制对等体处理错误ECONNRESET而不是正常的流结束。这两个都是对应用程序的语义更改。不建议。 - user207421