我有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"};
我不想拆分角色和配置参数的键字符串和值字符串。哎呀!
答案 0 :(得分:0)
确保您的nodeConfig.json正在使用未使用端口的"port"
属性(默认为5555
),并确保在hubConfig.json中使用{{1未使用端口的属性(默认为"port"
)
如果您可以验证上述内容是否正确,那么我能想象的唯一其他问题是,以前的集线器(可能在测试此功能时可能已启动)保持打开状态。
我会确保终止所有4444
进程,并在代码中添加故障保护以退出网格。