从脚本驱动Windows GUI程序

时间:2012-03-14 08:51:43

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

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

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

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

要求是:

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

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

    这样做的一种方法是等待十分钟,并希望模拟完成。另一种方法是使其成为事件驱动的,即观察“模拟运行...”对话框消失并替换为“模拟完成”对话框。

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

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

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

  • 这是为了工作,所以任何解决方案都必须免费用于商业用途。

我会接受任何符合上述标准的解决方案,但我对可以从Python驱动的内容有一个偏好。但是我也会接受自动化的GUI测试工具,我可以自定义它来做我想要的 - 可能是一个等同于Selenium的Win32 GUI浏览器? - 键盘宏录制器,它将生成自定义输出或其他任何有效的输出。

6 个答案:

答案 0 :(得分:11)

  

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

看看Sikuli,它对我有用。

答案 1 :(得分:6)

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

from automa.api import *

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

可以在http://www.getautoma.com/blog/category/ui-automation-examples

找到自动化脚本的一些示例

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

答案 2 :(得分:5)

根据您的要求给出Autohotkey另一种外观,它似乎适合这项工作。

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

答案 3 :(得分:4)

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

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

优势是:

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

答案 4 :(得分:1)

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

  

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

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

Query

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

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

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

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

  

事件检测以触发操作。

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

  

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

它是根据BSD许可的,允许商业用途。

另见:

答案 5 :(得分:0)

RIATest不是使用Python,而是符合条件。它就像Selenium,但适用于Win32 web。

RIATest使用Windows UI Automation API,可以驱动任何公开其GUI到UI自动化的Windows应用程序(包括所有本机和.NET应用程序)。

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