【问题标题】:Node.js Selenium IPv6 Issue (SocketException Protocol family unavailable)Node.js Selenium IPv6 问题(SocketException 协议系列不可用)
【发布时间】:2014-04-03 04:05:25
【问题描述】:

仅当我将 ios-driver jar 作为 Node.js 子级生成时才会发生此错误。

错误是java.net.SocketException: Protocol family unavailable

selenium-test.js:

var spawn = require('child_process').spawn;

var selenium = spawn('java', ['-jar', './ios-server-standalone-0.6.6-SNAPSHOT.jar', '-port', '4444']);
selenium.stderr.setEncoding('utf8');
selenium.stderr.on('data', function (data){
  console.log(data);
});

webdriverjs-test.js (webdriverjs)

var webdriverjs = require('webdriverjs');
var options = {
    desiredCapabilities: {
        browserName: 'safari',
        platform: 'OS X 10.9',
        version: '7.1',
        device: 'iphone'
    }
};

webdriverjs
  .remote(options)
  .init()
  .end();

通过创建上述文件,在一个窗口中运行 selenium-test.js 并在另一个窗口中运行 webdriverjs-test.js 来重现此错误。您首先需要npm install webdriverjscurl -O http://ios-driver-ci.ebaystratus.com/userContent/ios-server-standalone-0.6.6-SNAPSHOT.jar

版本信息:

$ java version
java version "1.7.0_51"
Java(TM) SE Runtime Environment (build 1.7.0_51-b13)
Java HotSpot(TM) 64-Bit Server VM (build 24.51-b03, mixed mode)

$ node -v
v0.10.26

为什么会发生这个错误,我该如何解决?

【问题讨论】:

  • 主持var selenium = spawn('java', ['-jar', './ios-server-standalone-0.6.6-SNAPSHOT.jar', '-port', '4444', '-host', '127.0.0.1']);?
  • 刚试过。发生同样的问题。
  • 您的环境中有没有 -Djava.net.preferIPv4Stack=true 的 JAVA_OPTS。这可能是一个原因。也尝试将它们传递给您的子进程。看到这个question
  • 我不这么认为。我可以在我的 shell 和子 shell 中检查 env 的输出,它们几乎相同。

标签: javascript node.js selenium-webdriver


【解决方案1】:

我设法通过让生成的孩子忽略标准输入来解决这个问题:

var selenium = spawn('java', ['-jar', './ios-server-standalone-0.6.6-SNAPSHOT.jar', '-port', '4444'], {stdio: ['ignore', null, null]});

我不确定为什么这种解决方法有效。

【讨论】:

  • 有趣。 OSX 处理 stdio 的方式似乎有问题。例如,我发现一个将大量调试输出转储到标准输出的 Eclipse 插件如果从 Finder 中执行,则能够使整个 Eclipse 应用程序崩溃。如果我从终端命令行启动 Eclipse,一切正常。
  • 该变通办法有效的原因与 OSX 无关,而是与 JVM 中的错误有关。请在此处查看我的解释 stackoverflow.com/a/52573455/6395447Java Bug Tracker 中的错误报告。
【解决方案2】:

我对此不太了解,到目前为止我发现这可能是 java 的绑定问题。更多细节在以下链接:(不是更新信息,可能会导致答案)

http://diario.beerensalat.info/2008/10/12/java_and_ipv6_on_bsd.html

如果不是这样,因为这篇文章建议将其更改为更高的端口应该可以工作。 "Protocol family unavailable" error while using VisualVM

【讨论】:

  • 我没有任何运气提升港口。
猜你喜欢
  • 1970-01-01
  • 2013-04-28
  • 1970-01-01
  • 2023-03-17
  • 1970-01-01
  • 2011-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多