python - pywinauto 不检测子窗口
问题描述
我正在使用 pywinauto 的最新版本(迄今为止);并且还使用 PyInspect (uia) 来识别控件。
我正在自动化应用程序上的控件,该过程的一部分是在触发窗口从菜单选择(如编辑->设置)出现后弹出的窗口上选中几个框。
问题是,pywinauto 似乎无法检测到新窗口。我看到成功打开;并且可以在 PyInspect 中将窗口和元素视为应用程序的子(子?)窗口。
我尝试过等待方法,认为自动化发生得太快了——但无济于事。就像是:
mysettings = app['app-name'].child_window(title_re="my target settings window", class_name="#32770").wait('exists', timeout=10)
这只会超时。如果我打印控件标识符,则永远不会包含“我的目标设置窗口”。
app['app-name'].print_control_identifiers()
我也试过 set_focus on top_window .. 那也没有用。我的结论是 pywinauto 无法检测到它的存在。对此有什么想法吗?
解决方案
我能够解决 pywinauto 检测子窗口的问题,以及紧随其后的问题:访问子窗口。
首先,我可以通过在应用程序定义中定义 backend='uia' 来让 pywinauto 检测新窗口,如下所示:
app = application.Application(backend='uia')
我以前刚有:
app = application.Application()
我的下一个问题是访问子窗口上的元素。正如我所预料的那样,我无法直接访问该窗口:
app['my app']['child window']['textbox'].set_edit_text("hello world")
相反,这段代码有效:
app['my app'].child_window(title='child window name').Edit1.set_edit_text("hello world")
虽然我已经解决了我的问题,但我注意到在定义 backend='uia' 之后,该过程现在执行得比以前慢得多。如果任何人偶然发现这方面有任何反馈(或优化我上面的努力),请贡献。
谢谢
推荐阅读
- terraform - Terraform - aws_cloud_watch_log_metric_filter
- java - (Java)如何从超类调用重写的“继承”方法?
- php - 带有包含参数的 php 函数的 Ajax 帖子
- sql - 提取特定查询记录并分配给VBA中的变量
- node.js - GAE 上的 Nodejs Websocket
- jenkins - Jenkins 不在 HTML 发布的页面上加载 CSS
- vba - Excel VBA - 打印后做某事
- node.js - voltdb-client-nodeJS 不适用于@AdHoc proceduer
- python-3.x - 如何在gremlin中检查顶点列表是否相互连接
- python - Django - 在特定数据库中创建对象