【问题标题】:Running AutoIT script on Selenium Grid在 Selenium Grid 上运行 AutoIT 脚本
【发布时间】:2014-06-14 06:41:40
【问题描述】:

如何在 Selenium Grid 设置上运行 AutoIT 脚本?

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

【问题讨论】:

  • 你得到答案了吗?如果您更好地描述您的网格执行部署/环境,这将有所帮助。就像测试代码从哪里运行一样。测试代码是否在每个网格节点本地运行?还是从某个测试代理机器 A 运行测试并连接到网格集线器 B,然后将执行传递到实际的网格节点 C-Z?
  • 你得到这个答案了吗?

标签: java internet-explorer-10 autoit internet-explorer-11 selenium-grid2


【解决方案1】:

您的问题(在撰写本文时)并未非常详细地说明您针对网格部署的特定测试设置。因此,无法提出确切的答案,因为这取决于您的环境是如何设置的。

最简单的方法是使用 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。

阅读这些博客文章以了解更多详细信息/了解如何在 Selenium 网格上运行 AutoIt:

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/

【讨论】:

    【解决方案2】:

    这应该适合你:

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

    【讨论】:

    • 如果执行 Selenium 测试代码的机器和网格节点不在同一台机器上,这不就是在本地执行代码吗,cmd 路径针对 Selenium 代码机器而不是网格节点.
    【解决方案3】:

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

    【讨论】:

    • 我可能弄错了,但乍一看,这种技术似乎只有在执行 Selenium 测试代码的机器和运行服务器 JAR(或 Java 绑定 JAR)的机器是同一台机器时才有效。因此,如果代码在机器 A 上运行但连接到网格节点机器 B,这将不起作用?因为 Java 代码引用 JAR 中的资源(但实际的目标 JAR 在远程主机上),所以它只会获取本地 JAR 的资源版本。
    • 是的,此代码不会将资源传输到远程机器。
    猜你喜欢
    • 1970-01-01
    • 2011-02-23
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 2018-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多