繁体   English   中英

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

[英]Execute batch file on Node machine - Selenium Grid

有没有办法使用 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);

这是你如何做到的。

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

这应该基本上可以解决您的用例。

上面来自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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM