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