在节点机器上执行批处理文件 - Selenium Grid

时间:2016-10-14 16:52:48

标签: java selenium selenium-webdriver selenium-grid2

有没有办法使用Selenium Grid执行生成在远程节点机器上的批处理文件来更改主机文件?

VM1包含代码并充当集线器 VM2运行Chrome节点 VM3运行Firefox节点 VM4运行IE节点

每个VM上都存在一组批处理文件,但是,按原样运行,只有VM1正在执行批处理文件。如何告诉Selenium在正确的节点上执行批处理文件?

FWIW,我现在正在通过Jenkins执行这些工作。

当我最初编写代码时,我只是通过Eclipse本地运行测试而不是使用Grid。话虽这么说,我写了一个AutoIT脚本来处理任务。我在本地运行时使用的代码是:

String env = StoredVariables.getenvironment().get();

if (env.equals("Beta Offline"))
{
    env = "BetaOffline";
}
if (env.equals("Live Offline"))
{
    env = "LiveOffline";
}

System.out.println("Set hosts file to " + env + " via AutoIT");

Thread.sleep(3000);

Runtime.getRuntime().exec(StoredVariables.getautoIT().get()+"HostsSwitcher.exe " + StoredVariables.getautoIT().get() + " " + env);

2 个答案:

答案 0 :(得分:1)

这是你如何做到的。

  1. 首先构建一个自定义servlet,它包含您共享的代码逻辑,可以通过GET或POST方法调用。
  2. 您现在需要在启动时将servlet注入节点。阅读here以了解如何执行此操作。
  3. 然后启动注入了自定义servlet的节点。
  4. 您现在可以开始运行测试,并且在需要在节点上执行批处理的位置,您查询网格以找出测试路由到的节点IP和节点端口。 [您可以参考我的this博客文章,了解如何查询网格以获取测试路由到的节点的IP和端口。]
  5. 使用从(4)中检索到的IP和PORT,您可以触发GET或POST来实际触发测试代码中的批处理命令。
  6. 这应该基本上解决你的用例。

答案 1 :(得分:0)

以上Krishnan Mahadevan的答案是一个很好的指导,它使我开始。我使用他的步骤1-3编写了一个在最终节点上运行的servlet。

对于步骤4和5,我使用了另一种方法。与其让客户端尝试获取Selenium节点的IP并直接与其进行通信,不如让客户端与集线器进行通信,然后让集线器将请求代理到正确的节点。

幸运的是,其他人已经完成了在selenium-grid-extensions项目中在中心上编写代理的工作。 hub-extensions组件将代理对Selenium Hub的以下格式的请求:

/grid/admin/HubRequestsProxyingServlet/session/${SESSIONID}/YourServletName

,然后使用/extra/YourServletName的路径将它们重新路由到正确的节点。

您可以使用以下方法从客户端代码中获取会话ID:

RemoteWebDriver driver;

String sessionId = driver.getSessionId().toString();