# 等待长时间操作
GUI应用程序行为通常不稳定,您的脚本需要等待,直到出现新窗口或关闭/隐藏现有窗口。 pywinauto可以隐式地(默认超时)灵活地等待对话框初始化,或者明确地使用专用方法/函数来帮助您使代码更容易和更可靠。
## Application 方法
> * [wait_cpu_usage_lower](https://pywinauto.readthedocs.io/en/latest/code/pywinauto.application.html?highlight=wait_cpu_usage_lower#pywinauto.application.Application.wait_cpu_usage_lower) (new in pywinauto 0.5.2, renamed in 0.6.0)
此方法对于多线程接口很有用,当GUI响应且所有控件都已存在且似乎已准备好使用时,允许在另一个线程中进行延迟初始化。因此,等待特定窗口的存在/状态是无用的。在这种情况下,整个进程的CPU使用率表示任务计算尚未完成。
范例:
~~~
app.wait_cpu_usage_lower(threshold=5) # 等到CPU使用率低于5%
~~~
>[info]注意:此方法仅适用于整个应用程序进程,不适用于窗口/元素。
## WindowSpecification 方法
These methods are available to all controls.
> * [wait](https://pywinauto.readthedocs.io/en/latest/code/pywinauto.application.html?highlight=wait#pywinauto.application.WindowSpecification.wait)
> * [wait\_not](https://pywinauto.readthedocs.io/en/latest/code/pywinauto.application.html?highlight=wait_not#pywinauto.application.WindowSpecification.wait_not)
有一个包含长等待的例子: [install script for 7zip 9.20 x64](https://gist.github.com/vasily-v-ryabov/7a04717af4584cbb840f).
`WindowSpecification`对象不一定与现有窗口/控件相关。 这只是一个描述,即搜索窗口的几个标准。 `wait`方法(如果没有引发任何异常)可以保证目标控件存在,甚至可见,启用和/或激活。
## `timings`模块中的函数
还有一些对任何Python代码都有用的低级方法。
> * [wait\_until](https://pywinauto.readthedocs.io/en/latest/code/pywinauto.timings.html?highlight=wait_until#pywinauto.timings.wait_until)
> * [wait\_until\_passes](https://pywinauto.readthedocs.io/en/latest/code/pywinauto.timings.html?highlight=wait_until_passes#pywinauto.timings.wait_until_passes)
如果每个函数调用都应该有时序控制,也可以使用装饰器[`pywinauto.timings.always_wait_until()`](https://pywinauto.readthedocs.io/en/latest/code/pywinauto.timings.html#pywinauto.timings.always_wait_until "pywinauto.timings.always_wait_until")和[`pywinauto.timings.always_wait_until_passes()`](https://pywinauto.readthedocs.io/en/latest/code/pywinauto.timings.html#pywinauto.timings.always_wait_until_passes "pywinauto.timings.always_wait_until_passes")
~~~
# call ensure_text_changed(ctrl) every 2 sec until it's passed or timeout (4 sec) is expired
@always_wait_until_passes(4, 2)
def ensure_text_changed(ctrl):
if previous_text == ctrl.window_text():
raise ValueError('The ctrl text remains the same while change is expected')
~~~
## Global timings for all actions
许多动作需要在之前,之后和之间暂停。 模块`timings`中有几个全局常量定义了这种暂停。 通过在对象`timings.Timings`中设置全局静态变量,它可以单独根据您的需要进行调整。
所有全局计时可以一次设置为默认值,或者加倍,或者除以2:
~~~
from timings import Timings
Timings.defaults()
Timings.slow() # double all timings (~2x slower script execution)
Timings.fast() # divide all timings by two (~2x faster)
~~~
## 识别控件
帮助您找到所需控件的方法。
> * [print_control_identifiers](https://pywinauto.readthedocs.io/en/latest/code/pywinauto.application.html?highlight=print_control_identifiers#pywinauto.application.WindowSpecification.print_control_identifiers)
> * [draw_outline](https://pywinauto.readthedocs.io/en/latest/code/pywinauto.controls.hwndwrapper.html?highlight=draw_outline#pywinauto.controls.hwndwrapper.HwndWrapper.draw_outline)
### 如何
* [如何](HowTo.md)
- 什么是Pywinauto
- 入门指南
- 如何
- 等待长时间操作
- 远程执行指南
- 每种不同控制类型可用的方法
- 贡献者
- 开发笔记
- 待办项目
- 更新日志
- 基本用户输入模块
- pywinauto.mouse
- pywinauto.keyboard
- 主要用户模块
- pywinauto.application
- pywinauto.findbestmatch
- pywinauto.findwindows
- pywinauto.timings
- 特定功能
- pywinauto.clipboard
- pywinauto.win32_hooks
- 控件参考
- pywinauto.base_wrapper
- pywinauto.controls.hwndwrapper
- pywinauto.controls.menuwrapper
- pywinauto.controls.common_controls
- pywinauto.controls.win32_controls
- pywinauto.controls.uiawrapper
- pywinauto.controls.uia_controls
- Pre-supplied Tests
- pywinauto.tests.allcontrols
- pywinauto.tests.asianhotkey
- pywinauto.tests.comboboxdroppedheight
- pywinauto.tests.comparetoreffont
- pywinauto.tests.leadtrailspaces
- pywinauto.tests.miscvalues
- pywinauto.tests.missalignment
- pywinauto.tests.missingextrastring
- pywinauto.tests.overlapping
- pywinauto.tests.repeatedhotkey
- pywinauto.tests.translation
- pywinauto.tests.truncation
- 后端内部实施模块
- pywinauto.backend
- pywinauto.element_info
- pywinauto.win32_element_info
- pywinauto.uia_element_info
- pywinauto.uia_defines
- 内部模块
- pywinauto.controlproperties
- pywinauto.handleprops
- pywinauto.xml_helpers
- pywinauto.fuzzydict
- pywinauto.actionlogger
- pywinauto.sysinfo
- pywinauto.remote_memory_block