1

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

2 回答 2

1

这是你如何做到的。

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

那应该基本上解决您的用例。

于 2016-10-15T05:34:46.663 回答
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();
于 2018-07-11T14:34:37.250 回答