2010-12-01 1 views
11

При запуске webdriver, за 3 минуты работы я получаю следующее исключение, и сбой Webdriver.Webdriver: java.net.BindException: Адрес уже используется: connect

Я использую только один экземпляр 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 
+0

Можете ли вы опубликовать фрагмент кода, из которого возникла проблема? – javamonkey79 2010-12-01 01:48:57

+0

Возможный дубликат [WebDriver: executeScript() вызывает BindException] (http://stackoverflow.com/questions/4330459/webdriver-executescript-causes-bindexception) – 2010-12-09 18:32:00

ответ

9

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

+0

Я понял, что запуск Javascript на каждой странице, загруженной с помощью теста WebDriver `((JavascriptExecutor) .executeScript (javascripthere) `вызывает эту проблему. Тем не менее, мне нужно запустить Javascript на тестируемых страницах. – KJW 2010-12-01 20:11:30

1

Если ваша ситуация, как у меня, где вы

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

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

Как так:

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

Это заставляет операционную систему, чтобы освободить гнездо, а не помещать его в TIME_WAIT состоянии.

3

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

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

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

Теперь я могу запустить 250 тестов с 0 исключениями, появляющимися на консоли Java-концентратора.