使用ProcessBuilder.java启动Selenium Hub和Node - 端口错误

时间:2014-07-10 09:37:57

标签: java swing selenium

我有Swing前端用作启动Selenium测试的客户端。在我开始测试过程的时候,我要做的第一件事是使用以下代码启动本地Selenium中心和节点:

    String[] nodeCmd = new String[]{"java", "-jar", "selenium-server-standalone-2.39.0.jar", "-role node", "-nodeConfig config\\DefaultNode.json"};
    ProcessBuilder pbNode = new ProcessBuilder(nodeCmd);
    pbNode.directory(new File("C:\\selenium\\"));
    File nodeLog = new File("C:\\selenium\\logs\\nodeOut.log");
    pbNode.redirectErrorStream(true);
    pbNode.redirectOutput(nodeLog);
    Process nodeP = pbNode.start();

    String[] hubCmd = new String[]{"java", "-jar", "selenium-server-standalone-2.39.0.jar", "-role hub", "-hubConfig config\\DefaultHub.json"};
    ProcessBuilder pbHub = new ProcessBuilder(hubCmd);
    pbHub.directory(new File("C:\\selenium\\"));
    File hubLog = new File("C:\\selenium\\logs\\hubOut.log");
    pbHub.redirectErrorStream(true);
    pbHub.redirectOutput(hubLog);
    Process hubP = pbHub.start();

虽然集线器已正确启动,但当节点进程启动时,它似乎正在作为集线器(日志输出完全相同)这样做,结果是它抱怨端口已在使用中。

  

线程中的异常" main" java.net.BindException:Selenium已在端口4444上运行。或者其他一些服务是。       在org.openqa.selenium.server.SeleniumServer.start(SeleniumServer.java:491)       在org.openqa.selenium.server.SeleniumServer.boot(SeleniumServer.java:300)       在org.openqa.selenium.server.SeleniumServer.main(SeleniumServer.java:245)       在org.openqa.grid.selenium.GridLauncher.main(GridLauncher.java:96)

任何想法我做错了什么?我检查了配置文件,它们肯定是正确的。

更新

所以我终于解决了我做错了什么!我的错误在于构建我的参数数组以传递给ProcessBuilder构造函数。

错:

String[] nodeCmd = new String[]{"java", "-jar", "selenium-server-standalone-2.39.0.jar", "-role node", "-nodeConfig config\\DefaultNode.json"};

右:

String[] nodeCmd = new String[]{"java", "-jar", "selenium-server-standalone-2.39.0.jar", "-role",  "node", "-nodeConfig", "config\\DefaultNode.json"};

我不想拆分角色和配置参数的键字符串和值字符串。哎呀!

1 个答案:

答案 0 :(得分:0)

确保您的nodeConfig.json正在使用未使用端口的"port"属性(默认为5555),并确保在hubConfig.json中使用{{1未使用端口的属性(默认为"port"

如果您可以验证上述内容是否正确,那么我能想象的唯一其他问题是,以前的集线器(可能在测试此功能时可能已启动)保持打开状态。

我会确保终止所有4444进程,并在代码中添加故障保护以退出网格。