2010-12-02 5 views
4

WebDriver : executeScript()가 BindException을 발생시킵니다.

javascripthere

WebDriver를 통해로드 된 각 페이지에서 ((JavascriptExecutor)driver).executeScript(javascripthere)을 실행하는 중

3 분 동안 테스트를 실행 한 후 다음 오류가 발생합니다.

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 

기본적으로 목적은 text() xpath 구문으로 선택할 수없는 텍스트 노드를 캡처하는 것입니다. Javascript는 중단 태그 앞뒤에 텍스트 노드를 <ddb> 태그로 래핑합니다. 그런 다음 WebDriver는 xpath 구문으로 /ddb를 사용하여 텍스트를 가져올 수 있습니다.

겉보기에는 부드럽게 작동하지만 정확히 3 분 후에 BindException 오류로 인해 충돌합니다. 이전 질문에서 Javascript가 너무 많은 아웃 바운드 연결을 일으키는 것으로 보입니다.

Javascript가 WebDriver에서 DOM을 지속적으로 편집하여 FirefoxDriver에서 텍스트 노드를 선택할 수 있도록하는 솔루션이 필요합니다.

+0

이 여전히 1.0B 릴리스에 문제가 있습니까? 그렇게 보입니다. 이 주소는 이미 꽤 많이 사용 중입니다. 회사에서 관리하는 원격 시스템에서이 작업을 실행하고 있으며 사용 가능한 포트를 늘릴 수있는 능력이 없습니다. 비록 내가 그랬더라도 이것은 웹 드라이어가 사용할 수있는 포트의 수를 늘려서는 안되는 문제입니다. – Aaron

+0

확실하지 않지만 Windows 문제인 것처럼 보입니다. – KJW

답변

1

최근 변경 (2010 년 10 월 28 일)으로 인해 문제가 해결 된 것 같습니다. 클라이언트가 셀레늄 서버에 말하거나 심지어 클라이언트가 파이어 폭스와 로컬 또는 원격으로 통신하여 일시적인 포트의 양을 과다하게 소모하는 문제였습니다. 프레임 워크 (클라이언트 및 서버면, 해당되는 경우)를 newest release (알파 -7)으로 업데이트해야합니다. 업그레이드 할 위치에 있지 않다면 간단히 임시 포트의 수를 로컬로 늘릴 수 있습니다. Windows의 경우 수정본은 here이고 그렇지 않은 경우 Google 검색 중 하나입니다.

문제 : http://code.google.com/p/selenium/issues/detail?id=923 수정

: http://code.google.com/p/selenium/source/detail?r=10082

+0

이 문제는 여전히 알파 7 릴리스에서 발생합니다. – KJW

+0

좋아, 그것은 구글 코드에서 브라우징에서 릴리스로 만든 것처럼 보였지만, 그렇지 않은 것 같아요. 로컬 임시 포트의 수를 늘리려고 했습니까? 그것은 keep-alive 연결을 구현할 때까지는 막판 역할을해야합니다. – dflems

+0

그래, 그게 유일한 방법이라고 생각해. 사람들이 언급 한 또 다른 가능한 해결책은 리눅스 환경에서 테스트를 실행하는 것이었다. 여전히 TCIP 포트가 열리지 만 리눅스는 더 용납됩니다. – KJW

관련 문제