Javascript Node.js Selenium IPv6问题(SocketException协议系列不可用)

Javascript Node.js Selenium IPv6问题(SocketException协议系列不可用),javascript,node.js,selenium-webdriver,Javascript,Node.js,Selenium Webdriver,只有当我将jar生成为Node.js子项时,才会发生此错误 错误是 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.stde

只有当我将jar生成为Node.js子项时,才会发生此错误

错误是

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);
});
$ 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
webdriverjs test.js()

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

版本信息:

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);
});
$ 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

为什么会发生这个错误?我该如何修复它?

我不太清楚,到目前为止我发现这可能是java的绑定问题。更多详情请点击以下链接:(这不是最新信息,可能会导致答案)

如果不是这样的话,正如这篇文章所建议的,将其改为更高的端口应该是可行的。

我通过使生成的子对象忽略stdin成功地解决了这个问题:

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


我不知道为什么这个解决方法有效。

Host about
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_选项。这可能是一个原因。还可以尝试将它们传递给您的子进程。看这个,我不这么认为。我可以在我的shell和子shell中检查
env
的输出,它们几乎是一样的。我没有运气提升端口。有趣。OSX处理stdio的方式似乎有问题。例如,我发现一个Eclipse插件将大量调试输出转储到standard out,如果它是从Finder执行的,它可以使整个Eclipse应用程序崩溃。如果我从一个终端命令行启动eclipse,一切都会正常工作。解决方案正常工作的原因与OSX无关,而是与JVM中的一个bug有关。请参阅此处的说明或中的错误报告。