Java 在Selenium网格上运行AutoIT脚本

Java 在Selenium网格上运行AutoIT脚本,java,internet-explorer-10,autoit,internet-explorer-11,selenium-grid2,Java,Internet Explorer 10,Autoit,Internet Explorer 11,Selenium Grid2,如何在Selenium网格设置上运行AutoIT脚本 我在所有机器上都有.exe文件,但需要有Selenium脚本来调用它,以便在网格的每个节点上运行,这可能吗?这应该适用于您: String cmd = "C:\\PathToExe\\autoit.exe"; Process p = Runtime.getRuntime().exec(cmd); p.waitFor(); 这应该适合您: String cmd = "C:\\PathToExe\\autoit.exe"; Process p

如何在Selenium网格设置上运行AutoIT脚本


我在所有机器上都有.exe文件,但需要有Selenium脚本来调用它,以便在网格的每个节点上运行,这可能吗?

这应该适用于您:

String cmd = "C:\\PathToExe\\autoit.exe";
Process p = Runtime.getRuntime().exec(cmd);
p.waitFor();

这应该适合您:

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());

我通常将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());

在撰写本文时,关于网格部署的特定测试设置,您的问题并不十分详细。因此,无法给出确切的答案,因为这取决于您的环境是如何设置的

最简单的方法是使用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();
简单示例假设您使用网格节点计算机的本地桌面或控制台/主机会话来运行自动测试,而不使用网格节点的远程桌面会话。如果是后者,则需要在psexec.exe的-i参数之后提供会话ID。您可以在此处找到有关PSExec.exe的更多信息:

给出的代码是一个简单的示例,您可能更喜欢添加额外的逻辑来检查测试是在本地执行还是在网格上执行,如果在本地执行,您的命令可以省略psexec的使用,而直接调用autoit.exe

阅读这些博客文章,了解有关在Selenium grid上使用测试运行AutoIt的更多详细信息/见解:


在撰写本文时,关于网格部署的特定测试设置,您的问题并不十分详细。因此,无法给出确切的答案,因为这取决于您的环境是如何设置的

最简单的方法是使用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();
简单示例假设您使用网格节点计算机的本地桌面或控制台/主机会话来运行自动测试,而不使用网格节点的远程桌面会话。如果是后者,则需要在psexec.exe的-i参数之后提供会话ID。您可以在此处找到有关PSExec.exe的更多信息:

给出的代码是一个简单的示例,您可能更喜欢添加额外的逻辑来检查测试是在本地执行还是在网格上执行,如果在本地执行,您的命令可以省略psexec的使用,而直接调用autoit.exe

阅读这些博客文章,了解有关在Selenium grid上使用测试运行AutoIt的更多详细信息/见解:


如果执行Selenium测试代码的机器与网格节点不在同一台机器上,这不就是在本地执行代码吗?cmd路径的目标是Selenium代码机器而不是网格节点。如果执行Selenium测试代码的机器与网格节点不在同一台机器上,这不就是在本地执行代码吗,cmd路径针对的是Selenium代码机器,而不是网格节点。我可能弄错了,但乍一看,这种技术似乎只有在执行Selenium测试代码的机器和运行server JAR或Java bindings JAR的机器是同一台机器时才起作用。所以,如果代码在机器A上运行,但连接到网格节点机器B,这就不起作用了?因为Java代码引用JAR中的资源,但实际的目标JAR位于远程主机上,所以它只能获取本地JAR版本的资源。是的,此代码不会将资源传输到远程计算机。我可能弄错了,但乍一看,只有当执行Selenium测试代码的机器和运行server JAR或Java bindings JAR的机器是同一台机器时,这种技术才起作用。所以,如果代码在机器A上运行,但连接到网格节点机器B,这就不起作用了?因为Java代码引用JAR中的资源,但实际的目标JAR位于远程主机上,所以它只能获取本地JAR版本的资源。是的,此代码不会将资源传输到远程计算机。您是否得到过答案?如果您能更好地描述您的网格执行部署/环境,将会有所帮助。比如测试代码从哪里运行。测试代码是否在每个网格节点本地运行?或者测试是从某个测试代理机器A运行,并连接到网格集线器B,然后将执行传递到实际的网格节点C-Z?对此您得到了任何答案吗?您得到过答案吗?如果您能更好地描述您的网格执行部署/环境,将会有所帮助。比如测试代码从哪里运行。测试代码是否在每个网格节点本地运行?或者测试是否从某个测试代理机器A运行,并连接到网格集线器B,然后将执行传递到实际的网格节点C-Z?对此您是否得到任何答案?