【发布时间】:2021-11-06 05:39:23
【问题描述】:
我正在使用 pywinauto 测试自定义 WPF 应用程序。
当连接 win32 时,我没有任何依赖,所以我连接到 uia。
启动应用程序后,我可以立即与 pywinauto 连接,但需要 30 秒以上才能访问任何元素。在初始延迟之后,交互和搜索控件很快。
我调用 windows() 是为了等待应用程序允许我与之交互。
main_app = Application(backend="uia").connect(path=APP_PATH)
main_app.windows()
经调查,挂起似乎发生在:“application.py”>“windows”>“findwindows.find_elements(...)”>“element.children(...)”。
如果我打开应用程序,等待 1 分钟,然后运行脚本,那么它几乎立即发生。并且可以快速找到后续控件。
在使用inspect.exe 查看层次结构时,我似乎看到了同样的行为。如果我在打开应用程序后立即刷新,则需要 30 秒以上才能显示任何内容。但是如果我在刷新前等待一分钟,它会立即更新。
我想知道其他人以前是否经历过这种情况,可能是什么原因/解决方案。
我正在跑步: Windows 10,python 3.8.3,pywinauto 0.6.8
【问题讨论】:
-
您可以使用:app.window(title='xyz').wait('ready', timeout=40) 等待应用程序加载并准备好(或超时)
-
感谢 Vidya,但我不想等待。我应该能够立即与 UI 进行交互,并且我正试图找出应用程序出了什么问题,导致它无法更早地准备好。
-
看起来需要一些 Windows KB 更新来修复 MS UI 自动化 API 中的问题。我不记得确切的更新链接。此处讨论了有关“uia”性能的一般技巧:github.com/pywinauto/pywinauto/issues/256(将来需要将所有配方收集到一个文档中)。
-
感谢@VasilyRyabov 提供该链接,我之前曾看到过该问题,但假设它会在我正在运行的较新版本的 Windows 中得到解决。我尝试安装那个特定的 KB,但得到错误,它是“不适用这个图像”。我调查得越多,这似乎是我正在运行的特定子进程的问题,它使系统感到困惑。似乎不一定与 pywinauto 相关。