【Pywinauto库】8.4 pywinauto.timings模块
概述
pywinauto.timings
模块包含所有 pywinauto 的全局时序设置,用于控制自动化操作的时间间隔、超时和重试策略。
主要配置对象
该模块有一个对象应该用于所有时序调整:
from pywinauto import timings# 使用 Timings 对象进行配置
timings.Timings
预定义设置
有几个预定义的设置可以快速配置时序:
# 快速模式 - 最小化等待时间
timings.Timings.fast()# 默认模式 - 标准等待时间
timings.Timings.defaults()# 慢速模式 - 增加等待时间以适应慢速系统
timings.Timings.slow()
可调整的时序设置
以下是所有可以调整的各个时序设置及其默认值:
窗口查找相关
window_find_timeout
(默认 5) - 查找窗口的超时时间(秒)window_find_retry
(默认 .09) - 查找窗口的重试间隔(秒)
应用程序相关
app_start_timeout
(默认 10) - 应用程序启动超时时间(秒)app_start_retry
(默认 .90) - 应用程序启动重试间隔(秒)app_connect_timeout
(默认 5.) - 应用程序连接超时时间(秒)app_connect_retry
(默认 .1) - 应用程序连接重试间隔(秒)
CPU 使用率相关
cpu_usage_interval
(默认 .5) - CPU 使用率检查间隔(秒)cpu_usage_wait_timeout
(默认 20) - CPU 使用率等待超时(秒)
存在性检查
exists_timeout
(默认 .5) - 存在性检查超时(秒)exists_retry
(默认 .3) - 存在性检查重试间隔(秒)
点击操作后等待
after_click_wait
(默认 .09) - 点击后等待时间(秒)after_clickinput_wait
(默认 .09) - 输入点击后等待时间(秒)after_menu_wait
(默认 .1) - 菜单操作后等待时间(秒)
键盘输入
after_sendkeys_key_wait
(默认 .01) - 发送按键后等待时间(秒)
按钮操作
after_button_click_wait
(默认 0) - 按钮点击后等待时间(秒)
窗口关闭
before_closeclick_wait
(默认 .1) - 关闭点击前等待时间(秒)closeclick_retry
(默认 .05) - 关闭点击重试间隔(秒)closeclick_dialog_close_wait
(默认 2) - 关闭对话框等待时间(秒)after_closeclick_wait
(默认 .2) - 关闭点击后等待时间(秒)after_windowclose_timeout
(默认 2) - 窗口关闭后超时(秒)after_windowclose_retry
(默认 .5) - 窗口关闭后重试间隔(秒)
焦点设置
after_setfocus_wait
(默认 .06) - 设置焦点后等待时间(秒)setfocus_timeout
(默认 2) - 设置焦点超时(秒)setfocus_retry
(默认 .1) - 设置焦点重试间隔(秒)
光标位置
after_setcursorpos_wait
(默认 .01) - 设置光标位置后等待时间(秒)
消息发送
sendmessagetimeout_timeout
(默认 .01) - 发送消息超时(秒)
控件操作
after_tabselect_wait
(默认 .05) - 标签选择后等待时间(秒)after_listviewselect_wait
(默认 .01) - 列表视图选择后等待时间(秒)after_listviewcheck_wait
(默认 .001) - 列表视图检查后等待时间(秒)listviewitemcontrol_timeout
(默认 1.5) - 列表视图项控制超时(秒)after_treeviewselect_wait
(默认 .1) - 树视图选择后等待时间(秒)after_toobarpressbutton_wait
(默认 .01) - 工具栏按钮按下后等待时间(秒)after_updownchange_wait
(默认 .1) - 上下控件变化后等待时间(秒)after_movewindow_wait
(默认 0) - 移动窗口后等待时间(秒)after_buttoncheck_wait
(默认 0) - 按钮检查后等待时间(秒)after_comboboxselect_wait
(默认 .001) - 组合框选择后等待时间(秒)after_listboxselect_wait
(默认 0) - 列表框选择后等待时间(秒)after_listboxfocuschange_wait
(默认 0) - 列表框焦点变化后等待时间(秒)after_editsetedittext_wait
(默认 0) - 编辑文本设置后等待时间(秒)after_editselect_wait
(默认 .02) - 编辑选择后等待时间(秒)
拖放操作
drag_n_drop_move_mouse_wait
(默认 .1) - 拖放移动鼠标等待时间(秒)before_drag_wait
(默认 .2) - 拖拽前等待时间(秒)before_drop_wait
(默认 .1) - 放置前等待时间(秒)after_drag_n_drop_wait
(默认 .1) - 拖放后等待时间(秒)
滚动操作
scroll_step_wait
(默认 .1) - 滚动步骤等待时间(秒)
TimeConfig 类
Defaults(*args, **kwargs)
将所有时间设置为默认时间。
Fast(*args, **kwargs)
设置快速计时值。目前,这会以下列方式改变时间:
- timeouts = 1 second
- waits = 0 seconds
- retries = .001 秒(最低限度!)
- 如果现有时间更快,那么保持现有时间
Slow(*args, **kwargs)
设置慢速计时值。目前,这会以下列方式改变时间:
- timeouts = default timeouts * 10
- waits = default waits * 3
- retries = default retries * 3
- 如果现有时间较慢,则保持现有时间
defaults()
将所有时间设置为默认时间。
fast()
设置快速计时值。
slow()
设置慢速计时值。
异常类
TimeoutError
超时异常类。
工具函数
always_wait_until(timeout, retry_interval, value=True, op=<built-in function eq>)
装饰器,每次都要调用 wait_until(...)
作为装饰函数/方法。
always_wait_until_passes(timeout, retry_interval, exceptions=<class 'Exception'>)
装饰器,每次都要调用 wait_until_passes(...)
作为装饰函数/方法。
timestamp()
获取精确的时间戳。
wait_until(timeout, retry_interval, func, value=True, op=<built-in function eq>, *args, **kwargs)
等到 op(function(*args, **kwargs), value)
为 True 或直到超时到期。
参数:
timeout
: 函数将尝试该函数多长时间retry_interval
: 重试之间等待多长时间func
: 将要执行的功能value
: 要比较的值(默认为 True)op
: 比较函数(默认为相等)args
: 调用时传递给 func 的可选参数kwargs
: 调用时要传递给 func 的可选关键字参数
返回: 函数的返回值。如果操作超时,则函数的返回值位于引发的异常的 function_value
属性中。
示例:
try:# 等待最多10.5秒,对象item_count()方法返回10,以0.5的增量递增wait_until(10.5, .5, self.item_count, 10)
except TimeoutError as e:print("timed out")
wait_until_passes(timeout, retry_interval, func, exceptions=<class 'Exception'>, *args, **kwargs)
等到 func(*args, **kwargs)
没有引发其中一个例外。
参数:
timeout
: 函数将尝试该函数多长时间retry_interval
: 重试之间等待多长时间func
: 将要执行的功能exceptions
: 要测试的异常列表(默认值:Exception)args
: 调用时传递给 func 的可选参数kwargs
: 调用时要传递给 func 的可选关键字参数
返回: 函数的返回值。如果操作超时,则引发的原始异常位于引发的异常的 original_exception
属性中。
示例:
try:# 等待最多10.5秒,以每秒0.5的增量找到窗口wait_until_passes(10.5, .5, self.Exists, (ElementNotFoundError,))
except TimeoutError as e:print("timed out")raise e.original_exception
使用示例
自定义时序配置
from pywinauto import timings# 设置自定义时序
timings.Timings.window_find_timeout = 10 # 增加窗口查找超时
timings.Timings.after_click_wait = 0.2 # 增加点击后等待时间# 或者使用预定义配置
timings.Timings.slow() # 使用慢速模式
使用等待函数
from pywinauto.timings import wait_until, wait_until_passes# 等待条件成立
def check_window_ready():return window.is_visible() and window.is_enabled()wait_until(10, 0.5, check_window_ready)# 等待操作成功
def risky_operation():# 可能抛出异常的操作window.click()wait_until_passes(5, 0.1, risky_operation, exceptions=(ElementNotFoundError,))