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

问题描述 投票:1回答:2

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

VM1包含代码并充当Hub 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);
java selenium selenium-webdriver selenium-grid2
2个回答
1
投票

这是你如何做到的。

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

这应该基本上解决你的用例。


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();
© www.soinside.com 2019 - 2024. All rights reserved.