Node.js Selenium IPv6问题(SocketException协议族不可用)

这个错误只发生在我产生的ios驱动程序 jar作为Node.js的孩子。

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

seleniumtest.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(); 

通过创build上述文件来重现此错误,在一个窗口中运行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 

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

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

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

我不确定为什么这种解决方法可行。

我没有太多的想法,到目前为止,我发现这可能是与java的绑定问题。 更多的细节在下面的链接:(不是更新的信息,它可能导致答案)

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

如果不是这样的话,因为这个postbuild议把它改成更高的端口应该可以工作。 使用VisualVM时出现“协议族不可用”错误