RemoteWebDriver和Grid - 是否可以获取服务器ip?

时间:2011-08-25 12:29:37

标签: ip selenium-grid

我正在使用Selenium 2和Grid中的RemoteWebDriver在多个虚拟机上划分我的测试。假设我有两台Linux机器,并且在测试中我指定了在Linux机器上运行的功能,我无法弄清楚这两台机器中的哪一台正在使用。 有什么办法可以搞清楚吗?有什么像driver.getServerIp()或其他东西? 原因是,在我的Selenium测试代码中,我想在正在运行测试的linux机器的控制台上启动一个bash脚本。因此,我必须知道测试运行在哪台机器上。

谢谢你们!

3 个答案:

答案 0 :(得分:4)

我的java技能不是最好的,这段代码可以使用一些清理,但这对我有用。

HttpHost host = new HttpHost(yourHubIP, yourHubPort); 
DefaultHttpClient client = new DefaultHttpClient(); 
URL testSessionApi = new URL("http://" + yourHubIP + ":" + yourHubPort + "/grid/api/testsession?session=" +  driver.getSessionId()); 
BasicHttpEntityEnclosingRequest r = new 
BasicHttpEntityEnclosingRequest("POST", testSessionApi.toExternalForm()); 
HttpResponse response  = client.execute(host,r);
JSONObject object = (JSONObject)new JSONParser().parse(EntityUtils.toString(response.getEntity()));     
String proxyID = object.get("proxyId"));

proxyID包含节点的IP。

答案 1 :(得分:1)

HttpCommandExecutor ce = (HttpCommandExecutor) ((RemoteWebDriver)driver).getCommandExecutor();
ce.getAddressOfRemoteServer();

虽然你可能知道地址,因为你将其传递给了RemoteWebDriver的构造函数。

答案 2 :(得分:1)

Bobble D提供的答案只是说Nilesh提到的JSONParser也有问题,这里有更新代码可以提供帮助

HttpHost host = new HttpHost(yourHubIP, yourHubPort); 
DefaultHttpClient client = new DefaultHttpClient(); 
URL testSessionApi = new URL("http://" + yourHubIP + ":" + yourHubPort +         "/grid/api/testsession?session=" +  ((RemoteWebDriver) driver).getSessionId()); 
BasicHttpEntityEnclosingRequest r = new 
BasicHttpEntityEnclosingRequest("POST", testSessionApi.toExternalForm()); 
HttpResponse response  = client.execute(host,r);
JSONObject object = new JSONObject(EntityUtils.toString(response.getEntity()));   
String proxyID = object.get("proxyId"));
System.out.println(proxyID.split("//")[1].split(":")[0]);