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源码,说实话,研读源码真是一个痛苦的过程,好多晦涩的语法搞得人晕晕乎乎.这两天算是理解了一小部分,这里先记录下来,也给需要的园友一个参考,奈何博主技术有限,如有理解不妥之 ...
随机推荐
- 内网渗透之frp使用
0x00 前言 nps相比上次已经介绍过了.但是他有一个致命缺点就是在scks5代理下会长连接一直不放开导致结果不准确.所以来讲讲frp的使用.frp虽然需要落地配置文件,但是扫描的结果还是很准确的. ...
- Python map学习笔记
map是一个高阶用法,字面意义是映射,它的作用就是把一个数据结构映射成另外一种数据结构. map用法比较绕,最好是对基础数据结构很熟悉了再使用,比如列表,字典,序列化这些. map的基本语法如下: m ...
- 1.Netty 实战前言
1.参考文档:Netty实战精髓篇 2.Netty介绍: Netty是基于Java NIO的网络应用框架. Netty是一个NIO client-server(客户端服务器)框架,使用Nett ...
- unzip解压3G或者4G以上文件失败的解决方法
Linux下,使用unzip解压时,报错:End-of-central-directory signature not found. Either this file is nota zipfile ...
- 【XDOJ】坑爹的杜神
原题: 众所周知,杜神非常喜欢出大模拟,也非常喜欢设置一些细节坑人.例如,在某次大赛中,他出了一道这样的题 (以下省略3000字) 计算出答案a后,你应该将a除以1000,再保留到小数点后两位输出,四 ...
- js数据持久化本地数据存储-JSON.parse和JSON.stringify的区别
JSON.stringify()的作用是将 JavaScript 值转换为 JSON 字符串, 而JSON.parse()可以将JSON字符串转为一个对象. 简单点说,它们的作用是相对的,我用JSON ...
- Mybatis 向oracle批量插入与更新数据
插入 <insert id="batchSave" parameterType="java.util.List"> INSERT INTO T_UP ...
- 【原】linux下部署web
本机安装xshell.新建->主机处输入ip->确定,按提示输入用户名和密码 安装jdk(一般Linux上都已经安装好了) 安装tomcat. (1)在tomcat官网上下载tar.gz版 ...
- Linux下nc或scp命令来实现文件传输
很实用的小技巧, 可以使用nc或者是scp nc命令,转载自:https://www.cnblogs.com/xuybin/archive/2013/09/27/3343098.html 发送端:ca ...
- 安装交叉工具链arm-linux-gcc
基本步骤如下: (1)建立目录 $ sudo mkdir /usr/local/arm (2)复制文件 文件arm-linux-gcc-4.4.3.tar.gz,放在/var/ftp中,进入ftp,$ ...