【问题标题】:pywinauto does not detect child windowpywinauto 不检测子窗口
【发布时间】:2021-09-16 22:20:32
【问题描述】:

我正在使用 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()

我还在 top_window 上尝试了 set_focus .. 也没有用。我的结论是 pywinauto 无法检测到它的存在。对此有什么想法吗?

【问题讨论】:

  • 您可以尝试使用 Autoit 来完成该任务。如果可行,也许您可​​以在 Python 中调整解决方案。
  • 到目前为止一切正常。我相信这只是我学习程序的一个障碍,而不是程序完成自动化的能力。我最终能够解决这个问题,请参阅下面的答案。

标签: python automation pywinauto


【解决方案1】:

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

谢谢

【讨论】:

  • 很高兴你能解决它。您可以将自己的答案标记为已接受(答案左侧的灰色复选框应该适合您)。关于“uia”的性能技巧,您可以在github.com/pywinauto/pywinauto/issues/256 中找到一些东西(将来需要将所有配方收集到一个文档中)。
猜你喜欢
  • 1970-01-01
  • 2021-01-30
  • 1970-01-01
  • 2022-06-10
  • 2012-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多