一、显示等待

所谓显示等待,是针对某一个特定的元素设置等待时间,如果在规定的时间内找到了该元素,就执行相关的操作,如果在规定的时间内没有找到该元素,在抛出异常

PS:注意显示等待和隐身等待的区别,隐身等待是对页面中的所有元素设置加载时间。

二、WebDriverWait类

在selenium框架中显示等待是通过WebDriverWait来实现的

WebDriverWait所在位置:在support包的wait.py文件中,selenium\webdriver\support\wait.py

构成函数:

class WebDriverWait(object):
def __init__(self, driver, timeout, poll_frequency=POLL_FREQUENCY, ignored_exceptions=None):
pass

构造函数参数解读:

driver:webdriver实例,可以是Ie, Firefox, Chrome or Remote
timeout:查找特定元素时的最大超时时间,单位seconds
poll_frequency:关键字参数,查找元素的频率,即每隔多少时间回调一次method,默认为 0.5 second
ignored_exceptions:关键字参数,在回调method过程中忽略哪些异常,默认为NoSuchElementException,如果有需要忽略多个异常,可以以iterable的形式传入参数,如tuple

实例方法:
def until(self, method, message=''):
"""Calls the method provided with the driver as an argument until the \
return value is not False.""" def until_not(self, method, message=''):
"""Calls the method provided with the driver as an argument until the \
return value is False."""

方法解读:

until:循环调用method的方法,直到method返回true()非false,返回结果:method方法返回的结果
until_not:循环调用method的方法,直到method返回false
在这两个方法中,参数methon是必传参数,且传入的是一个functhon对象(注意是函数对象,不带括号的),该method对象的参数是driver
def until(self, method, message=''):
screen = None
stacktrace = None # 设置超时时间
end_time = time.time() + self._timeout
while True: # 循环调用method方法
try:
# 执行传入的methon方法,且参数为driver
value = method(self._driver)
if value: # 如果method方法执行的结果为非false,则停止循环
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)

举个例子:

from selenium.webdriver.support.ui import WebDriverWait # 导入WebDriverWait
# method:参数为driver的lambda匿名函数
# 功能:找到id为someId的元素
# 返回值:x.find_element_by_id("someId")的WebElement对象
element = WebDriverWait(driver, 10).until(lambda x: x.find_element_by_id("someId"))

总结:

until / until_not方法

参数:method对象(注意是对象,而非调用方法),可以传入lambda匿名函数

method方法的参数为driver

selenium之python源码解读-WebDriverWait的更多相关文章

  1. selenium之python源码解读-expected_conditions

    一.expected_conditions 之前在 selenium之python源码解读-WebDriverWait 中说到,until方法中method参数,需要传入一个function对象,如果 ...

  2. selenium之python源码解读-webdriver继承关系

    一.webdriver继承关系 在selenium中,无论是常用的Firefox Driver 还是Chrome Driver和Ie Drive,他们都继承至selenium\webdriver\re ...

  3. 如何判断一个Http Message的结束——python源码解读

    HTTP/1.1 默认的连接方式是长连接,不能通过简单的TCP连接关闭判断HttpMessage的结束. 以下是几种判断HttpMessage结束的方式: 1.      HTTP协议约定status ...

  4. python 源码解读2

    http://www.jianshu.com/users/4d4a2f26740b/latest_articles http://blog.csdn.net/ssjhust123/article/ca ...

  5. Apache Beam WordCount编程实战及源码解读

    概述:Apache Beam WordCount编程实战及源码解读,并通过intellij IDEA和terminal两种方式调试运行WordCount程序,Apache Beam对大数据的批处理和流 ...

  6. 基于Docker的TensorFlow机器学习框架搭建和实例源码解读

    概述:基于Docker的TensorFlow机器学习框架搭建和实例源码解读,TensorFlow作为最火热的机器学习框架之一,Docker是的容器,可以很好的结合起来,为机器学习或者科研人员提供便捷的 ...

  7. Spark学习之路 (十六)SparkCore的源码解读(二)spark-submit提交脚本

    一.概述 上一篇主要是介绍了spark启动的一些脚本,这篇主要分析一下Spark源码中提交任务脚本的处理逻辑,从spark-submit一步步深入进去看看任务提交的整体流程,首先看一下整体的流程概要图 ...

  8. ansible源码解读

    Ansible源码获取 Ansible Github:https://github.com/ansible Ansible目录结构 $ tree -L 2 ansible-2.0.0.0 ansibl ...

  9. DRF(1) - REST、DRF(View源码解读、APIView源码解读)

    一.REST 1.什么是编程? 数据结构和算法的结合. 2.什么是REST? 首先回顾我们曾经做过的图书管理系统,我们是这样设计url的,如下: /books/ /get_all_books/ 访问所 ...

随机推荐

  1. [.NET Core] - 使用 EF Core 的 Scaffold-DbContext 脚手架命令创建 DbContext

    Scaffold-DbContext 命令 参数 Scaffold-DbContext [-Connection] <String> [-Provider] <String> ...

  2. 长乐培训Day8

    T1 远征 题目 [题目描述] 寒枫将军将要带领他的部队去圣雪山消灭那里的冰龙.部队分成了若干个小队,属于同一个小队的人兵种相同. 寒枫将军有着杰出的指挥能力,在战斗的时候,寒枫将军能够让所有相同兵种 ...

  3. Python-17-反射

    一.什么是反射 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力(自省).这一概念的提出很快引发了计算机科学领域关于应用反射性的研究.它首先被 ...

  4. str.format() 格式化数字的多种方法

    Python2.6 开始,新增了一种格式化字符串的函数 str.format(),它增强了字符串格式化的功能. 基本语法是通过 {} 和 : 来代替以前的 % . format 函数可以接受不限个参数 ...

  5. Django框架学习易错和易忘点

    一.get在几处的用法 1.获取前端数据 request.POST.get('xxx') #当存在多个值时,默认取列表最后一个元素:所以当存在多个值时,使用getlist 2.获取数据库数据 mode ...

  6. PB笔记之窗口之间传递多参数的方法

    messageboxex("警告","确定要把删除房间["+ls_id+"]吗?",question!,yesno!)<>1 t ...

  7. windows主机上ORACLE生成awr报告的步骤

    oracle数据库是一个大型的关系型数据库,那么如果有一天装载数据库的主机由于大量的IO操作导致主机cpu荷载超过100%会使得主机卡顿或者对数据库连接或者进行数据库进行正常的IO操作都会产生影响,所 ...

  8. Gitlab服务不能启动postgresql

    源博文:http://www.zxmseed.com/blog/911081 1.查看启动的服务 -sh-4.1$ gitlab-ctl status warning: gitlab-workhors ...

  9. Python中的单例模式的几种实现方式和优化以及pyc文件解释(转)

    原文:https://www.cnblogs.com/huchong/p/8244279.html 另一篇关于.pyc文件是什么?  原文: http://blog.sina.com.cn//s/bl ...

  10. hdu 2353 n皇后问题

    Problem Description 在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45角的斜线上.你的任务是,对于给定的N, ...