首页 > 解决方案 > 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 无法检测到它的存在。对此有什么想法吗?

标签: pythonautomationpywinauto

解决方案


我能够解决 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' 之后,该过程现在执行得比以前慢得多。如果任何人偶然发现这方面有任何反馈(或优化我上面的努力),请贡献。

谢谢


推荐阅读