2010-12-01 5 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

+0

가능한 중복 : (('(http://stackoverflow.com/questions/4330459/webdriver-executescript-causes-bindexception) –

답변

9

아웃 바운드 포트가 부족합니다. 이는 2 분 이내에 수천 개의 아웃 바운드 연결을 수행했음을 의미합니다. 해결책 : 연결 풀을 사용하거나 프로그램 속도를 느리게하십시오.

+0

나는 각 페이지에 자바 스크립트를 실행하는 WebDriver 테스트를 통해로드 것을 깨달았다 [WebDriver executeScript는() 않고 BindException이 발생] JavascriptExecutor) 드라이버) .executeScript (javascripthere가)'이 문제를 일으키는 것입니다. 그러나 테스트중인 페이지에서 Javascript를 실행해야합니다. – KJW

+0

비현실적인 상황을 테스트 할 필요는 없습니다.실용적인 클라이언트는 수천 개의 아웃 바운드 연결을 열지 않습니다. 당신은 * 서버 *를 포화시키고 싶어하기 때문에 당신은 그것을하고 있습니다. 그래서 대답은 더 많은 하드웨어 클라이언트를 사용하는 것입니다. – EJP

+2

연결 풀로 무엇이 있는지 잘 모릅니다. 아웃 바운드 연결이 끝나면 어떻게 닫습니까? – KJW

1

상황은 당신이

  1. 열린 포트 1
  2. 기계
  3. 에 연결 광산, 같은 경우 ??
  4. 가까운 포트 1
  5. 열린 포트 1
  6. 가 다른 시스템에 socket.close(); 전에 socket.setSoLinger(true, 0); 직접 추가

시도를 연결합니다. 그래서 같이

는 :

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

이 오히려 TIME_WAIT 상태로 퍼팅보다 소켓을 해제하기 위해 OS를 강제로.

+1

또한 TCP가 강제로 전송되는 모든 데이터를 삭제하도록하고, 정상적인 스트림 끝이 아닌 오류 ECONNRESET을 처리하도록합니다. 이 두 가지 모두 응용 프로그램의 의미 론적 변경입니다. 권장하지 않습니다. – EJP

3

일부 컴퓨터에서는 Win2003을 실행하고 일부는 Windows7을 실행하고 많은 컴퓨터가 Linux를 실행했습니다. 내가 발견 한 것은 모든 자바 프로세스를 닫고 재시작하는 것이 특히 많은 일 동안 자바 프로세스를 실행 한 후에 조금 도움이되었다는 것이다. 그리고, 무엇을 매우 크게 도움이하는 허브 역할과 독립 셀레늄 그리드를하고 있던 WIN2003 시스템에 (2 회 5000의 기본) MaxUserPort를 1000030 (최소)의 TcpTimedWaitDelay를Avoiding TCP/IP Port Exhaustion on MSDN했다. 변경 후 다시 부팅 - MSDN의 지침에 따라.

Windows "netstat -b"명령은 수십 개의 TCP/IP 연결이 열려 있는지 확인하기 위해 Win2003 시스템에서 매우 유용했습니다 (포트 4444 및 5555). 그것들은 분명히 Selenium Grid (v2) 시스템의 일부였습니다.

자바에서는 driver.quit();을 사용합니다. 각 시험 방법의 끝에서. 나는 driver.close()를 시도해보고 연속적으로 하나 이상의 테스트를 실행할 수있는 능력을 잃어 버렸다.

이제 허브의 Java 콘솔에 0 개의 예외를 표시하고 250 개의 테스트를 실행할 수 있습니다.

관련 문제