隐式等待
driver.implicitly_wait(seconds)
解读
隐式等待:服务端(Appium)会在特定的超时时间内重试多次寻找控件
需要设置在find_element之前。
作用于控件element,如果没有element可查找,直接结束
显式等待
1 等待某控件显示可见
WebDriverWait(self.driver, 60).until(expected_conditions.visibility_of_element_located(self.toast_indicator))
2 等待method满足特定条件
def load(driver):#方法为内部方法,入参写死为driver,返回布尔值
print("waitSpecificToast : load")
if self.getToast().find('onVideoLoadSuccess') != -1:
return True
else:
return False
WebDriverWait(self.driver, 60).until(load)#until入参为方法名。
显式等待原理(源码)
def until(self, method, message=''):
"""Calls the method provided with the driver as an argument until the \
return value is not False."""
screen = None
stacktrace = None
end_time = time.time() + self._timeout
while True:
try:
value = method(self._driver)
if value:
return value
except self._ignored_exceptions as exc:
screen = getattr(exc, 'screen', None)
stacktrace = getattr(exc, 'stacktrace', None)
time.sleep(self._poll)
if time.time() > end_time:
break
raise TimeoutException(message, screen, stacktrace)
调用携带driver参数的该method直到其返回值为真
解读
显式等待:在客户端(用例端)根据更灵活的条件循环等待条件满足
显式等待特点
• 功能差别
• 显式等待的条件非常灵活
• 隐式等待只用于元素定位
• 执行差别
• 显式等待本地轮询条件
• 隐式等待通过 appium server 轮询条件
sleep
def sleep(seconds): # real signature unknown; restored from __doc__
"""
sleep(seconds)
Delay execution for a given number of seconds. The argument may be
a floating point number for subsecond precision.
"""
pass
隐式等待作用于控件;显式等待作用于method;sleep作用于当前线程,延迟线程操作睡眠一定时间。
当case所有代码走完,会立即执行teardown,如果想case代码走完,case等待一段时间,在case最后加入sleep()