• pywinauto:Windows桌面应用自动化测试(三)


    前言

    上一篇文章地址:

    pywinauto:Windows桌面应用自动化测试(二)_Lion King的博客-CSDN博客

    下一篇文章地址:

    暂无

    一、win应用的后端技术

    1、官方文档

    安装了 pywinauto 后,如何开始使用呢?首先必须确定哪种辅助技术(pywinauto 的后端)可以用于你的应用程序,注意粗体部分。

    在 Windows 上支持的辅助技术列表如下:

    (1)Win32 API(backend="win32")- 目前的默认后端

    适用于 MFC、VB6、VCL、简单的 WinForms 控件以及大多数旧的遗留应用程序


    (2)MS UI Automation(backend="uia")

    适用于 WinForms、WPF、Store 应用、Qt5、浏览器
    注意:在启动之前,Chrome 需要 --force-renderer-accessibility 命令标志。由于 comtypes Python 库的限制,不支持自定义属性和控件。

    以上是官方文档的描述,那么对于有些老的应用设计技术怎么办呢?如Active Accessibility (MSAA)、IAccessible2

    对于这些比较老的技术,可能支持不是很好,但可以用backend="win32"去访问。

    2、一个关于后端辅助技术的实验

    我有一个qt5应用,我们分别使用win32和uia去连接,并打印元素标志,看看有什么效果。

    (1)win32
    1. import time
    2. from pywinauto.application import Application
    3. print(1, time.time())
    4. app = Application(backend='win32').start(r"C:\Program Files (x86)\SMoreVision\SMoreVision.exe") # backend='uia'
    5. time.sleep(5)
    6. print(2, time.time())
    7. dialog = app.window(title="SMore Vision")
    8. print(3, time.time())
    9. dialog.print_control_identifiers()

    打印信息如下:

    1 1694663709.4932415
    2 1694663715.176774
    3 1694663715.176774
    Control Identifiers:

    Qt5152QWindowIcon - 'SMore Vision'    (L240, T70, R1680, B970)
    ['Qt5152QWindowIcon', 'SMore Vision', 'SMore VisionQt5152QWindowIcon']
    child_window(title="SMore Vision", class_name="Qt5152QWindowIcon")

    Process finished with exit code 0

    (2)uia

    将上述代码的backend='win32'改为backend='uia',打印信息如下:

    Control Identifiers:

    Dialog - 'SMore Vision'    (L407, T80, R1847, B980)
    ['SMore VisionDialog', 'SMore Vision', 'Dialog', 'SMore Vision0', 'SMore Vision1']
    child_window(title="SMore Vision", auto_id="MainForm", control_type="Window")
       | 
       | GroupBox - ''    (L409, T82, R1845, B124)
       | ['GroupBox', 'SMore VisionGroupBox', 'GroupBox0', 'GroupBox1', 'SMore VisionGroupBox0', 'SMore VisionGroupBox1']
       | child_window(auto_id="MainForm.widget_titleBar", control_type="Group")
       |    | 
       |    | GroupBox - ''    (L409, T87, R547, B119)
       |    | ['GroupBox2', 'SMore VisionGroupBox2']
       |    | child_window(auto_id="MainForm.widget_titleBar.widget_caption", control_type="Group")
       |    |    | 
       |    |    | Image - ''    (L411, T89, R439, B117)
       |    |    | ['Image']
       |    |    | child_window(auto_id="MainForm.widget_titleBar.widget_caption.label_logo", control_type="Image")
       |    |    | 
       |    |    | Static - 'SMore Vision'    (L444, T89, R542, B117)
       |    |    | ['Static', 'SMore Vision2', 'SMore VisionStatic']
       |    |    | child_window(title="SMore Vision", auto_id="MainForm.widget_titleBar.widget_caption.label_title", control_type="Text")
       |    | 
       |    | Button - '设备管理'    (L593, T93, R693, B113)
       |    | ['设备管理', '设备管理Button', 'Button', 'Button0', 'Button1']
       |    | child_window(title="设备管理", 

    ...(此处省略其他信息)

    (3)初步结论

    如上所示,选对正确的后端辅助技术极其重要,否则没有可操作的元素的信息打印。另外,win32打印的类为Qt5152QWindowIcon,而uia打印的类为Dialog,因此元素识别的结果在不同后端辅助技术也是不一样的。综上,要求选择正确的后端技术。另外,在使用print_control_identifiers()函数打印时,如果元素很多,那么他打印的时间可能很久,如5分钟,但只要不报错,都是能打印的。

    (4)注意事项

    应该尽可能以管理员权限打开pycharm。

  • 相关阅读:
    海域可视化监管:浅析海域动态远程视频智能监管平台的构建方案
    【微信小程序】使用npm包
    【面试经典150 | 算术平方根】
    空域图像增强-图像灰度变换
    无线发射芯片解决方案在智能家居中的应用
    货币银行学简答论述题
    sparksql 中的concat_ws 和sort_array 和collect_list的使用方法
    MyBatis-Spring-Boot-Starter学习
    网络安全笔记-文件包含
    如何开发你的第一个Flutter App?
  • 原文地址:https://blog.csdn.net/weixin_43431593/article/details/132872993