Webdriver: java.net.BindException: адрес уже используется: подключиться - PullRequest
11 голосов
/ 01 декабря 2010

Во время работы веб-драйвера через 3 минуты я получаю следующее исключение, и веб-драйвер вылетает.

Я использую только один экземпляр веб-драйвера и один профиль 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 

Ответы [ 3 ]

9 голосов
/ 01 декабря 2010

У вас заканчиваются исходящие порты.Это означает, что вы выполнили тысячи исходящих подключений в течение двух минут.Решение: используйте пул соединений или замедлите работу вашей программы.

4 голосов
/ 05 сентября 2013

У меня была эта проблема на ряде машин, где некоторые работали с Win2003, некоторые работали с Windows7, а многие работали с Linux.Я обнаружил, что закрытие всех процессов Java и перезапуск немного помогли, особенно после запуска процессов Java в течение многих дней подряд.И что очень помогло, это Предотвращение исчерпания порта TCP / IP на MSDN с MaxUserPort из 10000 (вдвое больше по умолчанию 5000) и TcpTimedWaitDelay из 30 (минимум) на компьютере Win2003, на котором в качестве роли концентратора была запущена автономная сетка селена.REBOOT после изменения - в соответствии с инструкциями на MSDN.

Команда Windows "netstat -b" была очень полезна на машине Win2003 для подтверждения того, что были открыты десятки и десятки соединений tcp / ip (порты 4444 и 5555);они, очевидно, были частью системы Selenium Grid (v2).

В Java я использую driver.quit ();в конце каждого метода испытаний.Я попробовал driver.close () и потерял способность запускать более одного теста подряд.

Теперь я могу запустить 250 тестов с 0 исключениями, которые отображаются на java-консоли Hub.

1 голос
/ 09 ноября 2011

Если ваша ситуация похожа на мою, где вы

  1. открытый порт 1
  2. подключиться к машине
  3. ??
  4. закрыть порт 1
  5. открытый порт 1
  6. подключиться к другой машине

попробуйте добавить socket.setSoLinger(true, 0); непосредственно перед socket.close();.

Вот так:

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

Это заставляет ОС освобождать сокет, а не переводить его в состояние TIME_WAIT.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...