Appium等待體系-隱式等待顯式等待sleep

隱式等待

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()

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章