一些控件元素可能需要等待某个弹出窗口出现或某些窗口关闭,才能继续操作,WindowSpecification提供了wait()以及wait_not()两种方法
wait()
以下为wait()的源码:
def wait(self, wait_for, timeout=None, retry_interval=None):
"""
Wait for the window to be in a particular state/states.
:param wait_for: The state to wait for the window to be in. It can
be any of the following states, also you may combine the states by space key.
* 'exists' means that the window is a valid handle
* 'visible' means that the window is not hidden
* 'enabled' means that the window is not disabled
* 'ready' means that the window is visible and enabled
* 'active' means that the window is active
:param timeout: Raise an :func:`pywinauto.timings.TimeoutError` if the window
is not in the appropriate state after this number of seconds.
Default: :py:attr:`pywinauto.timings.Timings.window_find_timeout`.
:param retry_interval: How long to sleep between each retry.
Default: :py:attr:`pywinauto.timings.Timings.window_find_retry`.
An example to wait until the dialog
exists, is ready, enabled and visible: ::
self.Dlg.wait("exists enabled visible ready")
.. seealso::
:func:`WindowSpecification.wait_not()`
:func:`pywinauto.timings.TimeoutError`
"""
check_method_names, timeout, retry_interval = self.__parse_wait_args(wait_for, timeout, retry_interval)
wait_until(timeout, retry_interval,
lambda: self.__check_all_conditions(check_method_names, retry_interval))
# Return the wrapped control
return self.wrapper_object()
wait(self, wait_for, timeout=None, retry_interval=None)
其中:
wait_for:表示选择的窗口状态,
exists—表示窗口是一个有效的句柄
visible—表示窗口不隐藏,可视
enable—表示窗口未被禁用
ready—表示窗口可见且已启用
active—表示窗口处于活动状态
timeout:表示超时
retry_interval:表示重试时间间隔,单位为秒S
使用示例:
info = app1.window(title='Info', control_type="Window")
info.wait(wait_for='exists', retry_interval=2)
#等待info窗口有效
wait_not()
以下为wait_not()源码:
def wait_not(self, wait_for_not, timeout=None, retry_interval=None):
"""
Wait for the window to not be in a particular state/states.
:param wait_for_not: The state to wait for the window to not be in. It can be any
of the following states, also you may combine the states by space key.
* 'exists' means that the window is a valid handle
* 'visible' means that the window is not hidden
* 'enabled' means that the window is not disabled
* 'ready' means that the window is visible and enabled
* 'active' means that the window is active
:param timeout: Raise an :func:`pywinauto.timings.TimeoutError` if the window is sill in the
state after this number of seconds.
Default: :py:attr:`pywinauto.timings.Timings.window_find_timeout`.
:param retry_interval: How long to sleep between each retry.
Default: :py:attr:`pywinauto.timings.Timings.window_find_retry`.
An example to wait until the dialog is not ready, enabled or visible: ::
self.Dlg.wait_not("enabled visible ready")
.. seealso::
:func:`WindowSpecification.wait()`
:func:`pywinauto.timings.TimeoutError`
"""
check_method_names, timeout, retry_interval = \
self.__parse_wait_args(wait_for_not, timeout, retry_interval)
wait_until(timeout, retry_interval,
lambda: not self.__check_all_conditions(check_method_names, retry_interval))
# None return value, since we are waiting for a `negative` state of the control.
# Expect that you will have nothing to do with the window closed, disabled, etc.
与wait()类似,wait是等待处于某种状态,而wait_not是等待不处于某种状态
使用示例:
info = app1.window(title='Info', control_type="Window")
info.wait_not(wait_for='visiable', retry_interval=2)
#等待info窗口不可见