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


    显示等待语法

    以调用元素是否可见的方法为例,如下所示
    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
    图中最后一段解释订正:如果当前时间超过截止时间

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

    本文来自博客园,作者:中州韵,转载请注明原文链接:https://www.cnblogs.com/zhongzhouyun/p/14968000.html

  • 相关阅读:
    生成26个字母
    讲讲promise
    leetcode每日一题(2020-07-27)392. 判断子序列
    leetcode每日一题(2020-07-21):95. 不同的二叉搜索树 II
    leetcode每日一题(2020-07-18):97. 交错字符串
    【Python基础知识】(九)文件和异常
    【Python基础知识】(八)类和继承
    es6 语法
    ant-design-vue 之form表单中label-col和wrapper-col使用
    ant-design-vue 之form表单使用
  • 原文地址:https://www.cnblogs.com/zhongzhouyun/p/14968000.html
Copyright © 2020-2023  润新知