automation - PyWinAuto GUI 测试
问题描述
在我目前的工作中,我需要对基于 Windows 的第 3 方逻辑编程应用程序进行自动化测试。1)我想启动一个应用程序,2)指定要工作的窗口,3)找到所有控件和属性4)最后从控件中获取输出值有人可以帮忙吗?谢谢!
这是我的代码:
#import the pywinauto.application module
from pywinauto.application import Application
# create an applicaiton instance and execute the application
app = Application(backend="uia").start('calc.exe')
# creating window specification
dlg_spec = app.window(title='Calculator')
# window lookup to deal with the window/control
dlg_spec.wrapper_object().minimize()
dlg_spec.minimize()
# Printing the control identifiers
app.Properties.print_control_identifiers()
我得到 TimeoutError 和 ElementNotFoundError (在第 4 行)
解决方案
计算器现在有点复杂(耶!)。Windows 10calc.exe
实施创建了另一个进程。我可以说更多:它的 UI 控件层次结构不适合一个进程的边界(真的):一个应用程序的进程很少。我们计划在启动应用程序时检测新的生成过程,但它还没有在 pywinauto 中。但是更深入地了解.children()
或.descendants()
遵循跨流程边界的整个层次结构(唯一重要的是:谁是父级)。
当前的示例calc.exe
看起来如此(请参阅 repo 中的最新win10_calculator.py):
from pywinauto import Desktop, Application
app = Application(backend="uia").start('calc.exe')
dlg = Desktop(backend="uia").Calculator # window specification
dlg.type_keys('2*3=')
dlg.print_control_identifiers() # this is also window spec method
dlg.minimize()
# minimized window needs some tricks to find it and restore
Desktop(backend="uia").window(title='Calculator', visible_only=False).restore()
推荐阅读
- java - 如何在 if 语句中使用字符串?
- laravel - 如何在 Laravel 中使用表单销毁记录并显示状态?
- haskell - 在 Haskell 中实现 Prim 算法
- kubernetes - 多次安装单个 Kubernetes 部署
- php - 使用一个键注册多个对象是最佳实践吗?
- ios - Swift:是否有更快、更灵敏的方式来为 UIView 实现不同的角半径?
- java - 卡车中最大单位的贪婪方法
- c - 加入气泡的算法
- mysql - MYSQL,这不断弹出错误 SQL 查询:MySQL 说:文档 #1054 - '字段列表'中的未知列 'id_D10'
- android-studio - 由于“getDay()”已被弃用,如何从 Date 对象中获取日期?