4

javascripthere是在Javascript 中找到的脚本:如何在中断标记之后/之前获取文本节点并用 ddb 标记包装它们?

((JavascriptExecutor)driver).executeScript(javascripthere)在通过 WebDriver 加载的每个页面上运行时,

测试运行 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 用 tag 包裹了 break 标记前后的文本节点<ddb>。然后,WebDriver 能够使用/ddbas xpath 语法获取文本。

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

I need a solution to allow Javascript to continually edit the DOM in WebDriver so that text nodes is selectable by FirefoxDriver.

4

1 回答 1

1

This was a problem that seems to have been cleared up by recent changes (28 Oct 2010). It was an issue with over-exhausting the amount of ephemeral ports by either the client talking to the selenium server or even the client talking to Firefox, locally or remotely. You should update your framework (client and server side, if applicable) to the newest release (alpha-7). If you're not in a position to upgrade, you can simply increase the number of ephemeral ports locally. For Windows, the fix is here, otherwise, do some googling.

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

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

于 2010-12-09T18:04:03.083 回答