如何在Selenium Grid设置上运行AutoIT脚本?
我在所有机器上都有.exe文件,但需要有Selenium脚本来调用它才能在网格的每个节点上运行,这可能吗?
您的问题(在撰写本文时)对于网格部署的特定测试设置并不是很详细。因此,无法提出确切的答案,因为这取决于您的环境是如何设置的。
最简单的方法是使用PSExec.exe、telnet或SSH从测试执行计算机远程调用节点计算机上的AutoIt。下面给出了一个简单的例子,请注意,我还没有测试代码,但如果需要,应该进行一些小的调整。
String cmd = "C:\LocalMachinePathTo\psexec.exe \\%s -u %s -p %s -i C:\GridNodeMachinePathTo\autoit.exe";
Process p = Runtime.getRuntime().exec(String.format(cmd,gridNodeHostName,gridNodeWindowsLoginUserName,gridNodeWindowsLoginPassword);
p.waitFor();
这个简单的示例假设您使用网格节点机器的本地桌面(或控制台/头)会话来运行自动测试,而不使用到网格节点的远程桌面会话。如果是后者,则需要在参数-i之后为psexec.exe提供会话ID。您可以在此处找到有关psexec.exe的更多信息:
http://technet.microsoft.com/en-us/sysinternals/bb897553.aspx
给出的代码很简单。例如,您可能更喜欢添加额外的逻辑来检查测试是在本地执行还是在网格上执行,如果在本地执行,您的命令可以省略psexec的使用,只需直接调用autoit.exe。
阅读这些博客文章,了解更多关于让AutoIt在Selenium网格上运行测试的细节/见解:
https://autumnator.wordpress.com/2015/01/22/integrating-autoit-sikuli-and-other-tools-with-selenium-when-running-tests-in-selenium-grid/
https://autumnator.wordpress.com/2011/12/22/autoit-sikuli-and-other-tools-with-selenium-grid/
这应该适用于您:
String cmd = "C:\PathToExe\autoit.exe";
Process p = Runtime.getRuntime().exec(cmd);
p.waitFor();
我通常将autoit.exe作为资源打包到.jar中
// locate an executable script in the resources
URL res = getClass().getResource("/autoit/autoit_helloworld.exe");
// locate the script in the filesystem
File f = new File(res.file);
assertTrue(f.canExecute());
Process prog = Runtime.runtime.exec(f.canonicalPath);
assertEquals(0, prog.waitFor());