隱式等待
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()