🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] # 什么是pywinauto © Mark Mc Mahon and [Contributors](https://github.com/pywinauto/pywinauto/graphs/contributors), 2006-2018 Released under the BSD 3-clause license ## 它是什么 pywinauto是一组用于自动化Microsoft Windows GUI的python模块。 最简单的是,它允许您将鼠标和键盘操作发送到窗口对话框和控件。 ## 安装 * 运行 `pip install pywinauto` ## 手动安装 * 安装以下Python包 * [pyWin32](http://sourceforge.net/projects/pywin32/files/pywin32/Build%20220/) * [comtypes](https://github.com/enthought/comtypes/releases) * [six](https://pypi.python.org/pypi/six) * *(可选)* [Pillow](https://pypi.python.org/pypi/Pillow/2.7.0) (截图用) * 从[https://github.com/pywinauto/pywinauto/releases](https://github.com/pywinauto/pywinauto/releases)中下载最新的pywinauto * 解压并运行 `python setup.py install` 要检查是否已正确安装,请运行Python,**中文环境可能不适用** ~~~ >>> from pywinauto.application import Application >>> app = Application(backend="uia").start("notepad.exe") >>> app.UntitledNotepad.type_keys("%FX") ~~~ ## 它是如何工作的 核心概念在 [入门指南](getting_started.md)中描述. 通过每个类的属性访问(`__getattribute__`)完成了很多工作。 例如,当您获取Application或Dialog对象的属性时,它会分别查找对话框或控件。 ~~~ myapp.Notepad # 查找应用程序的窗口/对话框,其标题为'similar' # to "Notepad" myapp.PageSetup.OK # 首先查找标题为“PageSetup”的对话框 # 然后它在带有标题的对话框中查找控件 # 比如 "OK" ~~~ 此属性解析会延迟(使用默认超时),直到成功为止。 因此,例如,如果您选择菜单选项,然后查找结果对话框,例如 ~~~ app.UntitledNotepad.menu_select("File->SaveAs") app.SaveAs.ComboBox5.select("UTF-8") app.SaveAs.edit1.set_text("Example-utf8.txt") app.SaveAs.Save.click() ~~~ 在第2行,执行此行时可能无法打开SaveAs对话框。 所以会发生什么,我们要等到我们有一个控件要解决之前解决对话框。 此时,如果我们找不到带有ComboBox5控件的SaveAs对话框,那么我们会等待很短的时间再试一次,这会重复到最大时间(当前为5秒!) 这是为了避免必须明确使用```time.sleep```或```wait```函数。 如果您的应用程序执行长时间操作,则新对话框可能会在以后显示或消失。 你可以等待它的新状态 ~~~ app.Open.Open.click() # 打开大文件 app.Open.wait_not('visible') # 确保“打开”对话框变得不可见 # 等待最多30秒,直到加载data.txt app.window(title='data.txt - Notepad').wait('ready', timeout=30) ~~~ ## 一些类似的比较工具 * Python tools * [PyAutoGui](https://github.com/asweigart/pyautogui) - 一个流行的跨平台库(具有基于图像的搜索,没有基于文本的控件操作)。 * [Lackey](https://github.com/glitchassassin/lackey) - Sikuli的纯Python替代品(基于图像模式匹配)。 * [AXUI](https://github.com/xcgspring/AXUI) - MS UI Automation API的一个包装器。 * [winGuiAuto](https://github.com/arkottke/winguiauto) - 另一个使用Win32 API的模块。 * 其他脚本语言工具 * (Perl) [Win32::GuiTest](http://winguitest.sourceforge.net/) * (Ruby) [Win32-Autogui](https://github.com/robertwahler/win32-autogui) - Win32 API的包装器。 * (Ruby) [RAutomation](https://github.com/jarmo/RAutomation) - 有3个适配器:Win32 API,UIA,AutoIt。 * 其他免费工具 * (C#) [Winium.Desktop](https://github.com/2gis/Winium.Desktop) - 一个年轻但很好的基于MS UI Automation的工具。 * (C#) [TestStack.White](https://github.com/TestStack/White) - 另一个很好的基于MS UI Automation的库,历史悠久。 * [AutoIt](http://www.autoitscript.com/) - 具有自己的类似Basic语言的免费工具(基于Win32 API,没有.NET计划) * [AutoHotKey](https://github.com/Lexikos/AutoHotkey_L/) - 具有自己的脚本语言的原生C ++工具(.ahk) * [“很棒的测试自动化” 列表](https://github.com/atinfo/awesome-test-automation) on GitHub * [用于功能测试的大量开源工具](http://www.opensourcetesting.org/category/functional/) * 商业工具 * WinRunner ([http://www.mercury.com/us/products/quality-center/functional-testing/winrunner/](http://www.mercury.com/us/products/quality-center/functional-testing/winrunner/)) * SilkTest ([http://www.segue.com/products/functional-regressional-testing/silktest.asp](http://www.segue.com/products/functional-regressional-testing/silktest.asp)) * Many Others ([http://www.testingfaqs.org/t-gui.html](http://www.testingfaqs.org/t-gui.html)) ## 如果有那么多的话,为什么还要编写另一个自动化工具? 这里有很多原因:-) **采取不同的方法:** 大多数其他工具不是面向对象的,你最终写的东西如下: ~~~ window = findwindow(title = "Untitled - Notepad", class = "Notepad") SendKeys(window, "%OF") # Format -> Font fontdialog = findwindow("title = "Font") buttonClick(fontdialog, "OK") ~~~ 我希望创造一些更加用户友好(和pythonic)的东西。 例如,上面的编程转换如下: ~~~ win = app.UntitledNotepad win.menu_select("Format->Font") app.Font.OK.click() ~~~ **Python让它变得简单:** Python是一种很棒的编程语言,但是没有自动化工具是Pythonic(很少有库是用Python实现的)。 **本地化是主要要求:** Mark: “我在本地化行业工作,GUI自动化被广泛使用,因为您需要做的就是确保您的UI在Source UI方面的行为和正确性。 实际上,这对于测试原始源UI来说实际上更容易。 但是大多数自动化工具都基于控件的坐标或文本,这些可以在本地化软件中更改。 所以我的目标(虽然尚未实现)是允许脚本在原始源语言(通常是英语)和翻译软件(日语,德语等)之间保持不变。”