selenium expected_conditions 源码学习记录
#expected_conditions模块收集了一系列的场景判断方法
#源码地址
# https://seleniumhq.github.io/selenium/docs/api/py/_modules/selenium/webdriver/support/expected_conditions.html
#源码通过__call__实现函数调用
#如果类定义了__call__,那么对应的实例,可以直接作为函数使用
#个类实例要变成一个可调用对象,只需要实现一个特殊方法__call__()
#coding=utf-8
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait ''' # title_is:
判断当前页面的title是否等于预期字符串,返回true/false
# title_contains
判断当前页面的title是否包含预期字符串,true/false
return self.title in driver.title
# presence_of_element_located:
判断某个元素是否被加到了dom树里,并不代表该元素一定可见
return _find_element(driver, self.locator)
# presence_of_all_elements_located : 判断是否至少有1个元素存在于dom树中。 # visibility_of_element_located :
判断某个元素是否可见
return _element_if_visible(_find_element(driver, self.locator))/false
# element_to_be_selected:
判断某个元素是否被选中了,一般用在下拉列表
# element_located_selection_state_to_be:
跟上面的方法作用一样,只是上面的方法传入定位到的element,而这个方法传入locator # text_to_be_present_in_element :
判断某个元素中的text是否包含了预期的字符串 true/false
return self.text in element_text
# text_to_be_present_in_element_value:
返回true/false
判断某个元素中的value属性是否包含了预期的字符串get_attribute("value") # frame_to_be_available_and_switch_to_it :
判断该frame是否可以switch进去,如果可以的话,返回True并且switch进去,否则返回False
# alert_is_present :
判断页面上是否出现alert,如果出现driver.switch_to.alert,否则返回false # element_to_be_clickable :
判断某个元素中是否可见并且是enable的
if element and element.is_enabled():
return element # staleness_of :
等某个元素从dom树中移除,
self.element.is_enabled()
return False ''' #常用的几种示例
# 1.presence_of_element_located(locator)
# 检查页面的DOM中是否该存在元素。这并不一定意味着元素是可见的
# 源码
class presence_of_element_located(object):
""" An expectation for checking that an element is present on the DOM
of a page. This does not necessarily mean that the element is visible.
locator - used to find the element
returns the WebElement once it is located
"""
def __init__(self, locator):
self.locator = locator def __call__(self, driver):
return _find_element(driver, self.locator) #测试例子
driver = webdriver.PhantomJS()
driver.get("https://www.baidu.com")
WebDriverWait(driver,10,0.5).until(
EC.presence_of_element_located((By.ID,"kw")))
print ('ok')
driver.quit() #元素是否呗selected
class element_located_to_be_selected(object):
"""An expectation for the element to be located is selected.
locator is a tuple of (by, path)"""
def __init__(self, locator):
self.locator = locator def __call__(self, driver):
return _find_element(driver, self.locator).is_selected() #相似的场景和用法
WebDriverWait(driver,10,0.5).until(
EC.element_located_to_be_selected(locator)) #2 title_is(title) # 验证传入的usertitle和实际网页的title是否一致
# 源码
class title_is(object): def __init__(self, title):
self.title = title def __call__(self, driver):
return self.title == driver.title # __call__
# 实例要变成一个可调用对象,只需要实现一个特殊方法__call__()
# 实例初始化t=title_is(title)
# 实例作为函数使用t(driver)就可以直接执行self.title == driver.title #测试例子
#源码调用1
driver = webdriver.PhantomJS()
driver.get("https://www.baidu.com")
print (driver.title)
t=title_is(u'百度一下,你就知道')
print (t(driver))
# True #直接模块导入调用2,一般集合unitest assert
t=EC.title_is(u'百度一下,你就知道')
print (t(driver))
# True # #3去判断弹框是否出现了,先判断alert是否弹出,如果弹出就点确定按钮accept() class alert_is_present(object):
""" Expect an alert to be present."""
def __init__(self):
pass def __call__(self, driver):
try:
alert = driver.switch_to.alert
return alert
except NoAlertPresentException:
return False
#一般在程序中调用类似如下
alert=alert_is_present()
if alert(driver):
alert.accept()
else:
print (u'没有弹出')
selenium expected_conditions 源码学习记录的更多相关文章
- hashMap源码学习记录
hashMap作为java开发面试最常考的一个题目之一,有必要花时间去阅读源码,了解底层实现原理. 首先,让我们看看hashMap这个类有哪些属性 // hashMap初始数组容量 static fi ...
- Tomcat源码学习记录--web服务器初步认识
Tomcat作为开源的轻量级WEB服务器,虽然不是很适合某些大型项目,但是它开源,读其源代码可以很好的提高我们的编程功底和设计思维.Tomcat中用到了很多比较好的设计模式,其中代码风格也很值得我们去 ...
- java内置线程池ThreadPoolExecutor源码学习记录
背景 公司业务性能优化,使用java自带的Executors.newFixedThreadPool()方法生成线程池.但是其内部定义的LinkedBlockingQueue容量是Integer.MAX ...
- redux-thunk 源码学习记录
redux触发store更新,使用的dispatch(action),在关于createStore的源码解读中可以看到,store.dispatch限制了action必须是一个纯对象.是为了保持red ...
- Selenium 4.0beta:读源码学习新功能
Selenium 4 源码分析 这一篇文章我们来分析Selenium 4 python版源码. 除非你对Selenium 3的源码烂熟于心,否则通过对比工具分析更容易看出Selenium 4更新了哪些 ...
- Java集合专题总结(1):HashMap 和 HashTable 源码学习和面试总结
2017年的秋招彻底结束了,感觉Java上面的最常见的集合相关的问题就是hash--系列和一些常用并发集合和队列,堆等结合算法一起考察,不完全统计,本人经历:先后百度.唯品会.58同城.新浪微博.趣分 ...
- jQuery源码学习感想
还记得去年(2015)九月份的时候,作为一个大四的学生去参加美团霸面,结果被美团技术总监教育了一番,那次问了我很多jQuery源码的知识点,以前虽然喜欢研究框架,但水平还不足够来研究jQuery源码, ...
- MVC系列——MVC源码学习:打造自己的MVC框架(四:了解神奇的视图引擎)
前言:通过之前的三篇介绍,我们基本上完成了从请求发出到路由匹配.再到控制器的激活,再到Action的执行这些个过程.今天还是趁热打铁,将我们的View也来完善下,也让整个系列相对完整,博主不希望烂尾. ...
- MVC系列——MVC源码学习:打造自己的MVC框架(一:核心原理)
前言:最近一段时间在学习MVC源码,说实话,研读源码真是一个痛苦的过程,好多晦涩的语法搞得人晕晕乎乎.这两天算是理解了一小部分,这里先记录下来,也给需要的园友一个参考,奈何博主技术有限,如有理解不妥之 ...
随机推荐
- 4.java JMS技术
1.什么是JMS JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间, 或分布式系统中发 ...
- angular流程引擎集成
工作流在oa和erp中十分常见,现有成熟的工作流通常是在客户端实现的,web实现工作流的案例十分稀少.要实现web工作流必须要有强大的流程设计器,这里为大家介绍一款基于angular的流程控件,其功能 ...
- Git学习笔记(2)-Eclipse中Git插件使用
目前我使用的Eclipse luna版本中已经集成了git插件,这里就不介绍如何安装Git插件了,不懂可以看其他的博客. 上篇笔记介绍了Git的基本指令,实际开发中我基本都使用eclipse插件进行代 ...
- AspectJ注解支持
<aop:aspectj-autoproxy/> 配置aspectj启动 AspectJAutoProxyBeanDefintionParser implements BeanDefini ...
- UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd0 in position 0: invalid continuation byte
用pandas打开csv文件可能会出现这种情况,原因可能是excel自己新建一个*.csv文件时候容易出错.进入文件另存为,然后选择csv文件即可.
- 一次使用自定义 Http Header 引发的血案
一次使用自定义 Http Header 引发的血案 HttpClient Http Header 自定义 nginx 不转发 起因 最近在整理我们产品的 OpenAPI Demo (Python.C ...
- PHP swoole websocket协议上机指南
这一上机实验的开发环境用的是jetbrain公司的phpstorm 上级步骤如下: 创建websocket服务端 <?php $server = ); function onopen($serv ...
- POJ-2752-Seek the Name(KMP, 循环节)
链接: https://vjudge.net/problem/POJ-2752#author=0 题意: 给定若干只含小写字母的字符串(这些字符串总长≤400000),在每个字符串中求出所有既是前缀又 ...
- 基于node.js的websocket上传小功能
一.node.js 在目录里新建index.js var ws = require("nodejs-websocket"); console.log("开始建立连接... ...
- HTTP的options方法作用
1.HTTP的options方法作用 检测服务器所支持的请求方法.(比如:‘/user'路由支持哪些方法:get.post.delete...) CORS中的预检请求(检测某个接口是否支持跨域) 2. ...