【问题标题】:Driving a Windows GUI program from a script从脚本驱动 Windows GUI 程序
【发布时间】:2012-03-30 17:00:19
【问题描述】:

我必须使用 Windows 模拟包来执行重复性任务,每次使用的选项都略有不同。

由于我讨厌重复点击,基于懒惰和人类引入的错误数量,我想自动驱动这个程序。有问题的程序不支持脚本,没有 API,没有 COM,nada,nyet,nravin。据我所知,自动驱动该程序的唯一方法是模仿人类(即键盘和鼠标宏)。

我知道 AutoHotKey,但我认为它不能满足我的要求。 (或者它可能会做我想做的事,但它的脚本语言很糟糕。)

要求是:

  • 必须允许动作之间的时间延迟,或事件检测来触发动作。

    模拟最多可能需要十分钟才能运行,因此 GUI 驱动程序必须等到模拟完成才能开始新的模拟。

    执行此操作的一种方法是等待十分钟,然后希望模拟已经完成。另一种方法是使其成为事件驱动的,即注意“模拟正在运行...”对话框消失并被“模拟完成”对话框取代。

  • 必须允许组合复杂的键盘输入。

    每次模拟运行所需的某些键盘输入都不同。例如,模拟描述可能采用[Project name][Scenario name][Option 1][Option 2]... 格式,并且必须为每个模拟输入。

    我知道 AutoHotKey 允许基本级别的输入自定义,但我对文档的随意阅读使脚本语言看起来像是某种可怕的恐怖。

  • 这是用于工作的,因此任何解决方案都必须免费用于商业用途。

我会接受任何符合上述标准的解决方案,但我对可以从 Python 驱动的东西有强烈偏好。但是,我也会接受自动化的 GUI 测试工具,我可以自定义这些工具来做我想做的事——可能是 Win32 GUI 相当于 Selenium 的浏览器? - 将生成自定义输出的键盘宏记录器,或任何其他工作。

【问题讨论】:

    标签: python winapi user-interface automation gui-testing


    【解决方案1】:

    Sikuli 是一种可视化技术,用于自动化和测试图形用户 使用图像(屏幕截图)的界面(GUI)。西库里包括西库里 Script,一个用于 Jython 的可视化脚本 API,以及 Sikuli IDE,一个 用于编写可视化脚本的集成开发环境 轻松截图。 Sikuli Script 自动执行您在 没有内部 API 支持的屏幕。您可以以编程方式 控制网页、Windows/Linux/Mac OS X 桌面应用程序,或 甚至是在模拟器中或通过运行的 iphone 或 android 应用程序 VNC。

    看看Sikuli,它对我有用。

    【讨论】:

      【解决方案2】:

      看看Automa - 它是用 Python 编写的。它既可以用作独立工具,也可以用作您自己的脚本中的 Python 库:

      from automa.api import *
      

      它允许通过点击、按下、写入等命令自动化任何 Windows 应用程序。

      自动化脚本的一些示例可以在http://www.getautoma.com/blog/category/ui-automation-examples找到

      免责声明:我是 Automa 的开发人员之一。

      【讨论】:

      • 请注意这是一个需要花钱的python库
      • 免责声明:我是 Automa 的开发人员之一。请注意,这是一个需要花钱的 python 库 不,谢谢
      【解决方案3】:

      看看这个 https://pywinauto.github.io/

      您可以使用 python 脚本本身来控制您的 Windows 应用程序。

      优点是:

      • 无需学习新的语言/语法
      • 与其他现有脚本轻松集成

      【讨论】:

      【解决方案4】:

      再看一下 Autohotkey,根据您的要求,它似乎适合这项工作。

      或者检查来自 Microsoft 的 UI 自动化:http://msdn.microsoft.com/en-us/library/ms747327.aspx 和白色:http://white.codeplex.com/

      【讨论】:

        【解决方案5】:

        您可以将PyAutoGUI library 用于适用于 Windows、macOS 和 Linux 的 Python。

        必须允许动作之间的时间延迟。

        在每个键之间有四分之一秒的停顿键入示例:

        import pyautogui
        pyautogui.typewrite('Hello world!', interval=0.25)
        

        以下是在每次 PyAutoGUI 调用后设置 2.5 秒暂停的示例:

        pyautogui.PAUSE = 2.5
        

        必须允许组合复杂的键盘输入。

        结帐keyboard control functions,您可以在其中使用pyautogui.typewrite 输入内容。您可以传递变量以允许复杂的键盘输入。

        事件检测触发动作。

        您可以使用locate functions 在屏幕上直观地查找某些内容,并在一个简单的循环中根据该内容创建条件。

        解决方案必须免费用于商业用途。

        它是在允许商业用途的 BSD 下获得许可的。


        另见:

        【讨论】:

        【解决方案6】:

        RIATest 没有使用 Python,但在其他方面符合要求。它类似于 Selenium,但适用于 Win32 web。

        RIATest 使用 Windows UI 自动化 API,可以驱动任何将其 GUI 正确地暴露给 UI 自动化的 Windows 应用程序(包括所有本机和 .NET 应用程序)。

        免责声明:我在 RIATest 公司 Cogitek 工作。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-10-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多