Pywinauto - 如何在UIAWrapper窗口上等待

4

我试图等待一个特定的窗口(我使用从顶层窗口中找到的children方法找到了它),但似乎UIAWrapper没有wait方法。

有什么方法可以在这个窗口上使用wait?或者将UIAWrapper对象转换为WindowSpecification对象?

例如,我可以这样做:

app.top_window().wait("enabled")

但是我无法做到这一点:

app.top_window().children()[0].wait("enabled")

1
从包装器创建窗口规范尚未实现,但这是我们正在考虑的有趣功能。此函数必须考虑许多因素来创建与此元素完全匹配的规范。目前我将其想象为“试错法”,如下所示:1.创建一些简单的规范-如果失败,2.创建一些组合规范-如果失败,3.创建更复杂的规范,直到找到此元素而不是其他元素。这个过程也可以用于未来的“记录-重放”功能。 - Vasily Ryabov
1
top_window()非常简单:它创建类似于window(handle=found_hwnd)的规范,但是子元素往往没有本机句柄。甚至没有任何属性对于每个元素都始终存在。这使得您的功能请求变得不那么琐碎。 - Vasily Ryabov
1
是的,UIAWrapper是为已经存在的元素创建的,但是Window Specification可以为将来出现或已经关闭的元素创建。 - Vasily Ryabov
1
所以UIAWrapper确实存在,没有什么需要等待的。 - Vasily Ryabov
1
@VasilyRyabov 但是即使元素存在,它仍然可能被禁用或不活动。因此,如果可能的话,我可以在其上使用'wait("enabled")'。 - Drxxd
显示剩余3条评论
1个回答

2

让我们整合所有评论。这个功能请求可以在下一个重要版本pywinauto-0.7.0中实现。请参见issue#434

当前的解决方法:

from pywinauto.timings import wait_until

wrapper = app.top_window().children()[0]
wait_until(timeout=5, retry_interval=0.1, wrapper.is_enabled)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接