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

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