一、expected_conditions

之前在 selenium之python源码解读-WebDriverWait 中说到,until方法中method参数,需要传入一个function对象,如果每次都自定义或者使用lambda函数,显得比较麻烦。

其实在expected_conditions中,Selenium提供了一些常用的元素查找的条件类

在selenium\webdriver\support\expected_conditions.py中定义的所有类如下:

class title_contains(object):
class presence_of_element_located(object):
class visibility_of_element_located(object):
class visibility_of(object):
class presence_of_all_elements_located(object):
class visibility_of_any_elements_located(object):
class visibility_of_all_elements_located(object):
class text_to_be_present_in_element(object):
class text_to_be_present_in_element_value(object):
class frame_to_be_available_and_switch_to_it(object):
class invisibility_of_element_located(object):
class element_to_be_clickable(object):
class staleness_of(object):
class element_to_be_selected(object):
class element_located_to_be_selected(object):
class element_selection_state_to_be(object):
class element_located_selection_state_to_be(object):
class number_of_windows_to_be(object):
class new_window_is_opened(object):
class alert_is_present(object):

在上面定义的类中都实现了 __call__(self, driver)方法,这就意味着该类的对象是一个可调用的对象

如以visibility_of_element_located类为例:

实例化一个对象:visibility_of_element_located(locator)

在对象后加():调用对象,即调用类的 __call__方法,visibility_of_element_located(locator)(driver)

二、类中的 __init__  和__call__方法传参总结

1、传入locator,和driver参数

def __init__(self, locator):
  self.locator = locator def __call__(self, driver):
  return _find_element(driver, self.locator)

而locator,需要传入一个iterateble对象,如tuple,(by.ID,"id")

def _find_element(driver, by):
"""Looks up an element. Logs and re-raises ``WebDriverException``
if thrown."""
try:
return driver.find_element(*by)
except NoSuchElementException as e:
raise e
except WebDriverException as e:
raise e

2、传入element,和ignored参数

def __init__(self, element):
self.element = element def __call__(self, ignored):
return _element_if_visible(self.element)

该类型的传参有4个

class visibility_of(object)

class staleness_of(object)

class element_located_to_be_selected(object)

class element_selection_state_to_be(object)
lement_located_to_be_selected(object)和element_selection_state_to_be(object)实现的功能是一样的

3、其他还有title、window、handler、alert此处不再一一例举,具体查看源码

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

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

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

  2. selenium之python源码解读-WebDriverWait

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

  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. (二)spring Security 自定义登录页面与校验用户

    文章目录 配置 security 配置下 MVC 自定义登录页面 自定义一个登陆成功欢迎页面 效果图 小结: 使用 Spring Boot 的快速创建项目功能,勾选上本篇博客需要的功能:web,sec ...

  2. PAT甲级题分类汇编——理论

    本文为PAT甲级分类汇编系列文章. 理论这一类,是让我觉得特别尴尬的题,纯粹是为了考数据结构而考数据结构.看那Author一栏清一色的某老师,就知道教数据结构的老师的思路就是和别人不一样. 题号 标题 ...

  3. docker 实践八:docker-compose

    本篇介绍 docker 官方三剑客之一的 docker-compose. 注:环境为 CentOS7,docker 19.03. docker-compose docker-compose 的前身是开 ...

  4. VMware虚拟机(Ubuntu)通过主机代理实现——浏览器+终端访问外网

    环境说明:主机win10 + 虚拟机ubunut16.04 + 主机s-h-a-d-o-w-socks win10 主机相关操作配置1: 按下 Win + R 快捷键,输入 cmd ,然后在命令行中输 ...

  5. Scratch编程:快乐的小马(三)

    “ 上节课的内容全部掌握了吗?反复练习了没有,编程最好的学习方法就是练习.练习.再练习.一定要记得多动手.多动脑筋哦~~” 01 — 游戏介绍 这是一款简单的小游戏,实现了一匹小马跑来跑去(小马有跑动 ...

  6. 使用 react 的 hooks 进行全局的状态管理

    使用 react 的 hooks 进行全局的状态管理 React 最新正式版已经支持了 Hooks API,先快速过一下新的 API 和大概的用法. // useState,简单粗暴,setState ...

  7. 设计基于HTML5的APP登录功能及安全调用接口的方式(原理篇)

    登录 保存密码 安全 加密 最近发现群内大伙对用Hbuilder做的APP怎么做登录功能以及维护登录状态非常困惑,而我前一段时间正好稍微研究了一下,所以把我知道的告诉大家,节约大家查找资料的时间. 你 ...

  8. VS 2015 .net UI界面报错总结

    一.提示錯誤 解決方法: 右击解决方案点击properties Window Ctrl+W ,P 将Mnaged Pipeline Mode 从Integrated更改为Classic 二.提示錯誤 ...

  9. 2019年全国高校sql数据库

    2019年全国高校名单sql数据库信息: 根据教育部发布的文件整理形成可用.sql文件,导入数据库即可使用. 包括全国高等学校共计2956所,其中:普通高等学校2688所(含独立学院257所),成人高 ...

  10. Authentication failed for "http://xxxxxx"

    1.配置用户信息 git config --global user.name [username] git config --global user.email [email] 2.查询用户信息   ...