概述

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,))
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐