源码阅读篇:显式等待的执行过程
显示等待语法
以调用元素是否可见的方法为例,如下所示
解读:WebDriverWait(driver=dr, timeout=5)
概括:实例化了一个定时器对象,将对应的参数引用给了实例属性,这三个实例属性后面会在until中看到,记住意思
解读:wait.until( expected_conditions.visibility_of_element_located(locator) )
- python执行代码时会优先执行完内部的代码
expected_conditions.visibility_of_element_located(locator)
从图中得知,该代码只是执行了visibility_of_element_located类的实例化操作,至于locator是什么,暂时不管。
2.然后开始执行外部代码--->wait.until(visibility_of_element_located实例化的对象)
从图中得知,内部调用了visibility_of_element_located的实例化对象,而调用对象本质是调用对象的__call__方法,引出下文
3.解读visibility_of_element_located类中的__call__方法
查看_find_element()方法内部实现
到这里了,已经得知locator是什么,为什么需要使用元祖进行传参,以及为什么元祖中需要放元素表达式;都是为了最后能够给内部代码进行解包;同理,元素表达式存放在列表也能成功(已测试)
然后继续往下看,如果没有查找到元素,就抛出时异常,如果找到就返回元素,然后回到上一个页面,继续执行下面这句代码,这次执行的是外面的方法,如下
进入_element_if_visible内部
函数结束,回到__call__内部
__call__代码执行结束,回到wait.until()方法中
图中最后一段解释订正:如果当前时间超过截止时间
然后显示等待的执行流程就说完了,除了知道显示等待的执行流程,还额外收获了一个定时器的写法(接口自动化中偶尔会用上)
本文来自博客园,作者:中州韵,转载请注明原文链接:https://www.cnblogs.com/zhongzhouyun/p/14968000.html