WebDriver:executeScript()导致BindException

时间:2010-12-02 00:10:25

标签: java javascript webdriver

javascripthere是在Javascript: how to get text nodes following/preceding break tags and wrap them with ddb tag?

找到的脚本

在通过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>标记在break标记之前和之后包装文本节点。然后,WebDriver可以使用/ddb作为xpath语法来获取文本。

事情似乎运行顺利但在3分钟后崩溃并出现BindException错误。似乎我上一个问题中的Javascript导致了太多的出站连接。

我需要一个解决方案,允许Javascript在WebDriver中不断编辑DOM,以便FirefoxDriver可以选择文本节点。

1 个答案:

答案 0 :(得分:1)

这是一个似乎已被最近的变化(2010年10月28日)清除的问题。这是一个问题,即客户与selenium服务器交谈,甚至客户端与本地或远程的Firefox通信,都会耗尽短暂的端口数量。您应该将框架(客户端和服务器端,如果适用)更新为newest release(alpha-7)。如果您无法升级,可以在本地增加临时端口的数量。对于Windows,修复程序为here,否则,请进行一些Google搜索。

问题:http://code.google.com/p/selenium/issues/detail?id=923

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