selenium之python源码解读-expected_conditions
一、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的更多相关文章
- selenium之python源码解读-webdriver继承关系
一.webdriver继承关系 在selenium中,无论是常用的Firefox Driver 还是Chrome Driver和Ie Drive,他们都继承至selenium\webdriver\re ...
- selenium之python源码解读-WebDriverWait
一.显示等待 所谓显示等待,是针对某一个特定的元素设置等待时间,如果在规定的时间内找到了该元素,就执行相关的操作,如果在规定的时间内没有找到该元素,在抛出异常 PS:注意显示等待和隐身等待的区别,隐身 ...
- 如何判断一个Http Message的结束——python源码解读
HTTP/1.1 默认的连接方式是长连接,不能通过简单的TCP连接关闭判断HttpMessage的结束. 以下是几种判断HttpMessage结束的方式: 1. HTTP协议约定status ...
- python 源码解读2
http://www.jianshu.com/users/4d4a2f26740b/latest_articles http://blog.csdn.net/ssjhust123/article/ca ...
- Apache Beam WordCount编程实战及源码解读
概述:Apache Beam WordCount编程实战及源码解读,并通过intellij IDEA和terminal两种方式调试运行WordCount程序,Apache Beam对大数据的批处理和流 ...
- 基于Docker的TensorFlow机器学习框架搭建和实例源码解读
概述:基于Docker的TensorFlow机器学习框架搭建和实例源码解读,TensorFlow作为最火热的机器学习框架之一,Docker是的容器,可以很好的结合起来,为机器学习或者科研人员提供便捷的 ...
- Spark学习之路 (十六)SparkCore的源码解读(二)spark-submit提交脚本
一.概述 上一篇主要是介绍了spark启动的一些脚本,这篇主要分析一下Spark源码中提交任务脚本的处理逻辑,从spark-submit一步步深入进去看看任务提交的整体流程,首先看一下整体的流程概要图 ...
- ansible源码解读
Ansible源码获取 Ansible Github:https://github.com/ansible Ansible目录结构 $ tree -L 2 ansible-2.0.0.0 ansibl ...
- DRF(1) - REST、DRF(View源码解读、APIView源码解读)
一.REST 1.什么是编程? 数据结构和算法的结合. 2.什么是REST? 首先回顾我们曾经做过的图书管理系统,我们是这样设计url的,如下: /books/ /get_all_books/ 访问所 ...
随机推荐
- ALV报表——选择屏幕变量赋值
ABAP选择屏幕变量赋值 运行效果: 代码: *&---------------------------------------------------------------------* ...
- Spring Boot 集成 Swagger生成接口文档
目的: Swagger是什么 Swagger的优点 Swagger的使用 Swagger是什么 官网(https://swagger.io/) Swagger 是一个规范和完整的框架,用于生成.描述. ...
- Comet OJ Contest 4
A:签到. #include<bits/stdc++.h> using namespace std; #define ll long long #define inf 1000000010 ...
- 在论坛中出现的比较难的sql问题:35(时间间隔计算问题)
原文:在论坛中出现的比较难的sql问题:35(时间间隔计算问题) 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路.
- 一、zuul如何路由到上游服务器
所有文章 https://www.cnblogs.com/lay2017/p/11908715.html 正文 zuul在分布式项目中充当着一个网关的角色,而它最主要的功能像nginx一样针对上游服务 ...
- 【转载】IIS一个网站如何绑定多个主机域名
在IIS Web服务器的网站配置的过程中,有时候需要一个网站配置对应多个域名记录,例如不带www的主域名以及带www的域名解析记录对应同一个网站文件,此时最简单的配置方法就是将一个网站绑定多个主机域名 ...
- Html5知识精粹纪录
1. HTML5文档的正文结构及新元素 正文结构: <header> <nav> <section> <aside> <footer> 深入 ...
- 开发一个简单的工具,导出github仓库所有issue列表
Jerry有一个github仓库,专门用来存放自己的知识管理,通过一条条的issue来记录具体的知识点: https://github.com/i042416/KnowlegeRepository/i ...
- 第三篇:Python基本数据类型
在了解基本数据类型的时候,我们需要了解基本数据类型有哪些?数字int.布尔值bool.字符串str.列表list.元组tuple.字典dict等,其中包括他们的基本用法和其常用的方法,这里会一一列举出 ...
- Python 使用 docopt 解析json参数文件
1. 背景 在深度学习的任务中,通常需要比较复杂的参数以及输入输出配置,比如需要不同的训练data,不同的模型,写入不同的log文件,输出到不同的文件夹以免混淆输出 常用的parser.add()方法 ...