显式等待机制和隐式等待机制

等待类型:

全局隐式等待:每隔0.5秒查找一次,在服务端的等待,在程序运行周期内生效
显式等待:在客户端的等待,只是在写了等待语句的地方才生效 

 
隐式等待只能校验你的元素是否出现,但是无法校验可点击等属性
 
查看WebDriver源码可以看到
后面两个参数可以默认不填,poll_frequency=POLL_FREQUENCY第一个是间隔刷新时间,默认为0.5s,ignored_exceptions第二个是报错信息,默认为查找不到元素,nosuch element 
 
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)#mathod就是定位元素的方法,然后不停的去查找这个元素
            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)

   mobileBy源码分析,继承了selenium中By,加了手机端的一些by的一些元素的属性

 

使用lambda表达式
WebDriverWait(driver,time).until(lambda x:x.find_element_by_id("someId"))
返回一个元素
 
 
 
 
posted @ 2020-04-20 13:53  zhaikunkun  阅读(361)  评论(0)    收藏  举报