使用Python之PyWinAuto进行自动化测试

(Py2.7+, Py3.3+)
  1. 下载安装Windows GUI窗口的自动化测试库pywinauto:直接使用pip安装:进入cmd窗口 —> pip install --upgrade pywinauto 

    或者也可以手动安装(离线项目主机)

    • 安装 pyWin32 extensions

    • 下载 six并执行 python setup.py install来安装

    • 下载 comtypes 并执行 python setup.py install来安装

    • 下载 the latest pywinauto 并执行 python setup.py install来安装

    注:
    • six,comtypes,pywinauto可以使用 pip download pywinauto 得到相应的包

    • 离线情况下安装依赖pywin32 安装pywin32 要注意python版本,位数(要和系统统一),setutools版本等问题。官方下载地址

    • 支持的控件:

      标准Win32控件:MFC, WTL, VB6和其他一些使用WinForms的老应用 所有基于MS UI Automation的标准部件:WPF, Qt, 所有浏览器, Windows文件资源管理器和其他;

      对于非标准控件,简单情况下,我们可以在得到窗口句柄后,模拟键盘命令对其进行操作。

  2. 撰写PreSetAuto.py代码
    #导入时间库
    import time
    #导入pywinauto库
    from pywinauto import application
    #启动记事本
    app = application.Application().start('notepad.exe')
    
    #打开菜单方法1
    #app.Notepad.MenuSelect('帮助->关于记事本')
    #打开菜单方法2
    #app['记事本'].menu_select(u'帮助(H)->关于记事本(A)')
    #打开菜单方法3
    app.Notepad.TypeKeys('%HA',pause=1)
    
    #定位“关于记事本”的对话框方法1+点击
    #app.window(title_re='关于“记事本”').window(title_re='确定').Click()
    #定位“关于记事本”的对话框方法2+点击
    #app['关于“记事本”']['确定'].Click()
    #定位“关于记事本”的对话框方法3
    about_dlg = app.window(title_re="关于", class_name="#32770")
    about_dlg['确定'].Click()#  +点击
    
    #模拟键盘输入
    app.Notepad.TypeKeys(u"测试")
    time.sleep(2)
    
    #关闭有问题方法1?不成功
    #app.Notepad.close()
    #方法2成功运行
    #app.Notepad.TypeKeys('%FX')
    #方法3成功运行
    app.Notepad.MenuSelect("文件->退出")
     
    time.sleep(2)
    #退出时弹出对话框操作,同窗体定位,成功
    #app['记事本']['不保存'].Click()
    #退出时弹出对话框操作,同窗体定位,成功2
    app.window(title_re='记事本').window(title_re='不保存').Click()
  3. 安装打包可执行文件工具pyinstaller:pip install pyinstaller

    也可以下载源码包,然后进入包目录,执行下面的命令(需要安装setuptools):

    python setup.py install

    安装完后,检查安装成功与否:

    pyinstaller --version

  4. 打包单文件可执行文件:pyinstaller -F —w PreSetAuto.py
    在CMD环境中要先进入PreSetAuto.pys所在目录(如:E:\user\desktop\python):
    cd E:\user\desktop\python
    E:

    参数说明: -F:打包一个单个文件;—w:不显示Windows命令行界面

    注:
    1. Pyinstaller对中文目录存在一定的兼容问题。故使用过程中,一般最好不要将exe文件放在带有中文的目录下,比如桌面。

    2. main return -1这种错误基本都是自己的问题, 只能在输出exe时参数加个’-d’即debug模式, 然后再查下打印的错误信息

    调试记录FAQ:

    1. Q:[6188] Failed to execute script notepad Traceback (most recent call last): File "notepad.py", line 3, in <module> File "site-packages\pywinauto\application.py", line 1052, in start File "site-packages\pywinauto\application.py", line 1039, in app_idle pywintypes.error: (1813, 'WaitForInputIdle', '\xd5\xd2\xb2\xbb\xb5\xbd\xd3\xb3\x cf\xf1\xce\xc4\xbc\xfe\xd6\xd0\xd6\xb8\xb6\xa8\xb5\xc4\xd7\xca\xd4\xb4\xc0\xe0\x d0\xcd\xa1\xa3')

      A:把notepad.py改名为PreSetAuto.py即可。原因:打包生成的notepad.exe与系统程序同名冲突。。。

参见

  1. fangchaooo/zh-pywinauto-doc/How To's.md

  2. Python---一个简单的自动化测试框架

  3. python自动化测试(3)- 自动化框架及工具

  4. 基于Python的互联网软件测试开发

  5. 收藏清单: 一步到位, python自动化测试工具最全资源汇总

  6. 2gis/Winium.Desktop

  7. pywinauto/pywinauto

  8. 总结Pyinstaller的坑及终极解决方法

  9. pyinstaller failed to execute script - 江南小虫虫的博客- CSDN博客