【问题标题】:WebDriver: executeScript() causes BindExceptionWebDriver:executeScript() 导致 BindException
【发布时间】:2010-12-02 00:10:24
【问题描述】:

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

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

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

【问题讨论】:

  • 这仍然是 1.0b 版本的问题吗?看起来是这样。我得到这个地址已经被大量使用了。我在我公司控制的远程机器上运行它,我没有能力增加可用端口。即使我这样做了,这似乎也是一个不应通过增加 webdriver 可以使用的端口数来掩盖的问题。
  • 不确定,但似乎是 Windows 问题。

标签: java javascript webdriver


【解决方案1】:

最近的更改(2010 年 10 月 28 日)似乎已经解决了这个问题。客户端与 selenium 服务器对话,甚至客户端与 Firefox,本地或远程对话,都会导致过度消耗临时端口的数量。您应该将您的框架(客户端和服务器端,如果适用)更新为newest release(alpha-7)。如果您无法升级,您可以简单地在本地增加临时端口的数量。对于 Windows,修复方法是 here,否则,做一些谷歌搜索。

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

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

【讨论】:

  • 这个问题在 alpha 7 版本中仍然存在。
  • 好吧,它看起来好像是通过在谷歌代码上浏览它来发布的,但我想情况并非如此。您是否尝试增加本地临时端口的数量?在他们实施保持活动连接之前,这应该作为权宜之计。
  • 是的,我想这是唯一的方法。人们提到的另一个可能的解决方案是在 linux 环境下运行测试。它仍然会导致一大堆 TCIP 端口打开,但 linux 更宽容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-04
  • 2021-12-22
  • 1970-01-01
  • 2015-06-06
  • 2015-05-18
  • 2014-03-24
相关资源
最近更新 更多