【问题标题】:Pywinauto - How to wait on UIAWrapper windowsPywinauto - 如何在 UIAWrapper 窗口上等待
【发布时间】:2017-11-02 04:06:19
【问题描述】:

我正在尝试等待特定窗口(我使用顶部窗口中的 children 方法发现该窗口),但似乎 UIAWrapper 没有 wait 方法。

如何在此窗口上使用wait?或者也许将UIAWrapper 对象转换为WindowSpecification 对象?

例如,我可以这样做:

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

但我不能这样做:

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

【问题讨论】:

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

标签: python ui-automation pywinauto


【解决方案1】:

让我们组合所有的 cmets。此功能请求可以在下一个主要版本 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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-05
    • 2022-01-09
    • 1970-01-01
    相关资源
    最近更新 更多