11

在运行 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 
4

3 回答 3

9

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

于 2010-12-01T04:47:03.420 回答
4

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

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

在 Java 中,我使用 driver.quit(); 在每个测试方法结束时。我尝试了 driver.close() 并失去了连续运行多个测试的能力。

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

于 2013-09-05T06:02:35.093 回答
0

如果你的情况和我一样,你在哪里

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

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

像这样:

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

这会强制操作系统释放套接字,而不是将其置于某个TIME_WAIT状态。

于 2011-11-09T19:29:26.340 回答