有没有办法使用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);
答案 0 :(得分:1)
这是你如何做到的。
答案 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();