源码阅读篇:显式等待的执行过程

显示等待语法

以调用元素是否可见的方法为例,如下所示
image.png

解读:WebDriverWait(driver=dr, timeout=5)

image.png
概括:实例化了一个定时器对象,将对应的参数引用给了实例属性,这三个实例属性后面会在until中看到,记住意思

解读:wait.until( expected_conditions.visibility_of_element_located(locator) )

  1. python执行代码时会优先执行完内部的代码

expected_conditions.visibility_of_element_located(locator)
image.png
从图中得知,该代码只是执行了visibility_of_element_located类的实例化操作,至于locator是什么,暂时不管。

2.然后开始执行外部代码--->wait.until(visibility_of_element_located实例化的对象)
image.png
从图中得知,内部调用了visibility_of_element_located的实例化对象,而调用对象本质是调用对象的__call__方法,引出下文

3.解读visibility_of_element_located类中的__call__方法
image.png
查看_find_element()方法内部实现
image.png
到这里了,已经得知locator是什么,为什么需要使用元祖进行传参,以及为什么元祖中需要放元素表达式;都是为了最后能够给内部代码进行解包;同理,元素表达式存放在列表也能成功(已测试)

然后继续往下看,如果没有查找到元素,就抛出时异常,如果找到就返回元素,然后回到上一个页面,继续执行下面这句代码,这次执行的是外面的方法,如下
image.png
进入_element_if_visible内部
image.png
函数结束,回到__call__内部
image.png
__call__代码执行结束,回到wait.until()方法中
EFA99F43-B589-4DFB-B771-F4ADE0D01B43.png
图中最后一段解释订正:如果当前时间超过截止时间

然后显示等待的执行流程就说完了,除了知道显示等待的执行流程,还额外收获了一个定时器的写法(接口自动化中偶尔会用上)

posted @ 2021-07-03 23:48  中州韵  阅读(135)  评论(0编辑  收藏  举报