pywinauto

(仅作为个人笔记,如有雷同,请联系删除。。)

== Pywinauto ==是基于Python开发的,用于自动化测试的脚本模块,主要操作于Windows标准图形界面。它可以允许你很容易的发送鼠标、键盘动作给Windows的对话框和控件。

参考: https://www.cnblogs.com/xp1315458571/p/13892205.html

1、安装方式:

  • 命令行安装: pip install pywinauto ,简单,方便,直接。

  • 手动安装:【解压缩后执行 python setup.py install】

  • pyWin32:python调用windows api的库。 https://sourceforge.net/projects/pywin32/files/pywin32/Build%20220/
  • comtypes: COM接口的调度。 https://github.com/enthought/comtypes/releases
  • six:用来兼容Python2和Python3的库。 https://pypi.org/project/six/
  • Pillow:可选,用来做屏幕截图的。 https://pypi.org/project/Pillow/2.7.0/
  • Pywinauto:PC端自动化工具。 https://github.com/pywinauto/pywinauto/releases
  • 检查安装成功:使用python解释器运行以下代码,启动windows自带的记事本,如果正常启动不报错,则安装成功。
    from pywinauto.application import Application
    app = Application(backend="uia").start("notepad.exe")
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nDRJJdlR-1649085284382)(images/siOJTqTWNys4zVRoDyqDqKnqnsjRccIeCLmSVO0Y-fs.png)]

  • 2、backend选择:

    安装完成后,要先确定哪种==可访问性技术(backend)==可以用于我们的应用程序。在windows上受支持的有两种:

  • Win32 API ( backend= "win32" ) ,默认的backend
  • MS UI Automation ( backend="uia" )
  • 注: 可以借助于GUI对象检查工具来确定程序到底适用于那种backend 。eg:如果使用 inspect 的uia模式,可见的控件和属性更多的话,backend可选uia,反之,backend可选win32。

    常用的检查工具:
      1. Inspect(定位元素工具(uia))
      2. Spy++ (定位元素工具(win32))
      3. UI Spy (定位元素工具)
      4. Swapy(可简单生成pywinauto代码)
    

    3、元素定位工具 inspect:

  • 下载:https://github.com/blackrosezy/gui-inspect-tool,或 https://www.pconlife.com/download/otherfile/128053/5f2da0a792d68ff9e9bf33a60613fb57/,或
    https://pan.baidu.com/s/1LHvbcP5NKqSHC7FLSpiTFQ,提取码:p4hm

  • 使用:将inspect左上角的下拉列表中切换到==“UI Automation”,然后鼠标点一下需要测试的程序窗体==,右侧就会显示相关信息,如图所示,说明backend为uia。

    注意:程序里面的任意一个部位其实都是控件,在inspect的控件树中都可以找到,是一层一层分级别的,可以一个个点开所有控件。

    4、启动并创建一个实例对象:connect 或 start

    from pywinauto.application import Application
     
  • 启动start(self, cmd_line, timeout=app_start_timeout),timeout为超时参数,默认为5s,如果启动时间较长可设置 timeout。
    举例:

    app = Application(backend = "uia").start(r"E:\Office\Office14\EXCEL.exe") # 启动Excel
    app = Application(backend = "uia").start(r'C:\Program Files (x86)\Tencent\WeChat\WeChat.exe') # 启动微信
     
  • 连接connect()用于连接已经启动的程序。连接一个已经运行的程序有以下几种方法:
    (1). 使用进程号:进程号在 任务管理器-详细信息 可以查看,项目中一般根据进程名称自动获取
    (2). 使用handle:应用程序的窗口句柄
    (3). path:进程的执行路径。GetModuleFileNameEx 模块会查找进程的每一个路径并与我们传入的路径去做比较
    (4). 参数组合:定位元素的参数,传递给pywinauto.findwindows.find_elements()这个函数

    app = Application(backend='uia').connect(process=8948)  # 进程号
    app = Application().connect(handle=0x010f0c)  # 句柄
    app = Application().connect(path="D:\Office14\EXCEL.exe")  # path
    app = Application().connect(title_re=".*Notepad", class_name=“Notepad”) # 参数组合
       

    注意:应用程序必须先准备就绪,才能使用connect(),当应用程序start()后没有超时和重连的机制。在pywinauto外再启动应用程序,需要sleep,等程序start。

    5、Application对象app的常用方法:

    app.top_window() # 返回应用程序当前顶部窗口,是WindowSpecification对象,可以继续使用对象的方法往下继续查找控件
    # eg:如:app.top_window().child_window(title='地址和搜索栏', control_type='Edit')
    app.window(**kwargs) # 根据筛选条件,返回一个窗口, 是WindowSpecification对象,可以继续适用对象的方法往下继续查找控件
    # eg: 微信主界面 app.window(class_name='WeChatMainWndForPC')
    app.windows(**kwargs) # 根据筛选条件返回一个窗口列表,无条件默认全部,列表项为wrapped(装饰器)对象,可以使用wrapped对象的方法,注意不是WindowSpecification对象
    # eg:[<uiawrapper.UIAWrapper - '李渝的早报 - Google Chrome', Pane, -2064264099699444098>]
    app.kill(soft=False) # 强制关闭
    app.cpu_usage() # 返回指定秒数期间的CPU使用率百分比
    app.wait_cpu_usage_lower(threshold=2.5, timeout=None, usage_interval=None) # 等待进程CPU使用率百分比小于指定的阈值threshold
    app.is64bit() # 如果操作的进程是64-bit,返回True
    

    6、操作控件的步骤:

  • 实例化要操作的进程,得到Application对象
    eg:app=Application().connect(process=8948)
  • 选择窗口 :app.window(‘一个或多个筛选条件’), 得到的窗口是WindowSpecification对象;
  • 基于WindowSpecification对象使用其方法再往下查找,定位到具体的控件
  • 使用控件的方法属性执行需要的操作
  • 7、控件的定位和可用方法:

  • 层级查找控件的方法:定位控件

    # 通过层级查找控件相关方法
    window(**kwargs) # 用于窗口的查找
    child_window(**kwargs) # 可以无视层级的找后代中某个符合条件的元素===>【最常用】
    parent() # 返回此元素的父元素,没有参数
    children(**kwargs) # 返回符合条件的子元素列表,支持索引,是BaseWrapper对象(或子类)
    iter_children(**kwargs) # 返回子元素的迭代器,是BaseWrapper对象(或子类)
    descendants(**kwargs) # 返回符合条件的所有后代元素列表,是BaseWrapper对象(或子类)
    iter_children(
  • pywinauto(仅作为个人笔记,如有雷同,请联系删除。。)==Pywinauto==是基于Python开发的,用于自动化测试的脚本模块,主要操作于Windows标准图形界面。它可以允许你很容易的发送鼠标、键盘动作给Windows的对话框和控件。参考:https://www.cnblogs.com/xp1315458571/p/13892205.html1、安装方式:命令行安装:pip install pywinauto,简单,方便,直接。手动安装:【解压缩后执行 python set 安装包下载链接: pyWin32: python调用windows api的库 https://sourceforge.net/projects/pywin32/files/pywin32/Build 220/ comtypes: COM接口的调度https://github.com/en... 先学会如何查看窗口框架,可以用inspect.exe 查看窗口的层级结构 以打开的记事本为例 也可以通过print_ctrl_ids()方法 (另外一个print_control_identifiers() 功能一样)查看当前窗口下的控件 from pywinauto import Applica...
    PYTHON自动化测试模块之pywinauto 一、pywinauto简介 pywinauto是一组python模块,用于自动化Microsoft Windows GUI。在最简单的情况下,它允许将鼠标和键盘操作发送到windows对话框和控件。 二、pywinauto安装方法 pywinauto可以与pip和conda一起安装。 运行pip install pywinauto 或者 conda install -c conda-forge pywinauto. 推荐安装方式使用国内镜像源速度安装速度较快
    pywinauto的学习记录安装使用须知确定app的可访问技术启动应用程序辅助工具详细使用开启app功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 第一次尝试这种方法记录自己学过的一些东西,后续会将一些重要的知识点慢慢记录进来,h
    https://pywinauto.readthedocs.io/en/latest/ https://www.kancloud.cn/gnefnuy/pywinauto_doc https://github.com/pywinauto Dialog是一个窗口,包含其他几个GUI元素/控件,如按钮,编辑框等。对话框不一定...
    Pywinauto的文档资源很丰富,以下是一些常用的文档资源: 1. 官方文档:Pywinauto官方文档包含了库的安装、配置和使用等方面的详细说明,您可以在这里找到API文档、用户指南、教程等。链接:https://pywinauto.readthedocs.io/en/latest/index.html 2. Pywinauto展示:这是一个包含示例和演示的网站,您可以在这里查看Pywinauto的功能和用法。链接:https://pywinauto.github.io/docs/controls_overview.html 3. Github仓库:Pywinauto的Github仓库包含了库的源代码、问题追踪等资源,您可以在这里提交问题或贡献代码。链接:https://github.com/pywinauto/pywinauto 4. Stack Overflow:这是一个程序员社区,您可以在这里查找关于Pywinauto的问题和答案。链接:https://stackoverflow.com/questions/tagged/pywinauto
  •