#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 源码学习记录的更多相关文章

  1. hashMap源码学习记录

    hashMap作为java开发面试最常考的一个题目之一,有必要花时间去阅读源码,了解底层实现原理. 首先,让我们看看hashMap这个类有哪些属性 // hashMap初始数组容量 static fi ...

  2. Tomcat源码学习记录--web服务器初步认识

    Tomcat作为开源的轻量级WEB服务器,虽然不是很适合某些大型项目,但是它开源,读其源代码可以很好的提高我们的编程功底和设计思维.Tomcat中用到了很多比较好的设计模式,其中代码风格也很值得我们去 ...

  3. java内置线程池ThreadPoolExecutor源码学习记录

    背景 公司业务性能优化,使用java自带的Executors.newFixedThreadPool()方法生成线程池.但是其内部定义的LinkedBlockingQueue容量是Integer.MAX ...

  4. redux-thunk 源码学习记录

    redux触发store更新,使用的dispatch(action),在关于createStore的源码解读中可以看到,store.dispatch限制了action必须是一个纯对象.是为了保持red ...

  5. Selenium 4.0beta:读源码学习新功能

    Selenium 4 源码分析 这一篇文章我们来分析Selenium 4 python版源码. 除非你对Selenium 3的源码烂熟于心,否则通过对比工具分析更容易看出Selenium 4更新了哪些 ...

  6. Java集合专题总结(1):HashMap 和 HashTable 源码学习和面试总结

    2017年的秋招彻底结束了,感觉Java上面的最常见的集合相关的问题就是hash--系列和一些常用并发集合和队列,堆等结合算法一起考察,不完全统计,本人经历:先后百度.唯品会.58同城.新浪微博.趣分 ...

  7. jQuery源码学习感想

    还记得去年(2015)九月份的时候,作为一个大四的学生去参加美团霸面,结果被美团技术总监教育了一番,那次问了我很多jQuery源码的知识点,以前虽然喜欢研究框架,但水平还不足够来研究jQuery源码, ...

  8. MVC系列——MVC源码学习:打造自己的MVC框架(四:了解神奇的视图引擎)

    前言:通过之前的三篇介绍,我们基本上完成了从请求发出到路由匹配.再到控制器的激活,再到Action的执行这些个过程.今天还是趁热打铁,将我们的View也来完善下,也让整个系列相对完整,博主不希望烂尾. ...

  9. MVC系列——MVC源码学习:打造自己的MVC框架(一:核心原理)

    前言:最近一段时间在学习MVC源码,说实话,研读源码真是一个痛苦的过程,好多晦涩的语法搞得人晕晕乎乎.这两天算是理解了一小部分,这里先记录下来,也给需要的园友一个参考,奈何博主技术有限,如有理解不妥之 ...

随机推荐

  1. PostMan 中使用Datas 文件一次Run 只能使用一个

    PostMan 一次run  只能有一个文件. Note that you can only use one data file for one run.

  2. tp5.1 nginx配置

    解决方案 修改fastcgi的配置文件    目录:/www/server/nginx/conf/fastcgi.conf fastcgi_param PHP_ADMIN_VALUE "op ...

  3. Android异常与性能优化相关面试问题-内存管理面试问题详解

    内存管理机制概述: 分配机制:操作系统会为每一个进程分配一个合理的内存大小,从而保证每一个进程能够正常的运行,不至于内存不够使用,或者某个进程占用过多的内存. 回收机制:在系统内存不足的时候,系统有一 ...

  4. SAP 选择屏幕的上方 (sscrfields) 按钮设置

    TABLES sscrfields. PARAMETERS: p_carrid TYPE s_carr_id, p_cityfr TYPE s_from_cit. , "激活按钮 . INI ...

  5. TCP的ACK原理和延迟确认机制

    某天晚上睡觉前突然想到 tcp的ACK确认是单独发的还是和报文一起发的,下面看一下别人的解答 一.ACK定义TCP协议中,接收方成功接收到数据后,会回复一个ACK数据包,表示已经确认接收到ACK确认号 ...

  6. Date 对象

    JavaScript Date 对象 Date 对象 Date 对象用于处理日期与时间. 创建 Date 对象: new Date() 以下四种方法同样可以创建 Date 对象: var d = ne ...

  7. 几台WEB经常宕机,求分析原因

    几台WEB服务器经常宕机,平时运行得好好的,负载也都在2以下,偶尔会突然负高上去就宕机,init 6也无法重启成功 只能echo 'b'>/proc/sysrq-trigger 硬重启才行,dm ...

  8. 消金ABS

    对于持牌消金公司来说,发行ABS需满足至少3年经营期限的硬性规定,目前已开业的24家消金公司里,有15家符合此项规定. 2019年下半年以来,个人消费金融领域共发行了15个资产证券化产品,发行规模达4 ...

  9. Shell登陆

    Shell登录信息 注:只对本地终端起作用,远程终端不起作用(也就是说这个文件对远程登录是无效的). 修改后: 输出: 注:这里在配置文件中添加\l之后会显示终端(这里为终端1),按住Alt+F2可以 ...

  10. ga

    https://developers.google.com/analytics/devguides/collection/gtagjs/events ga 添加事件示例: 在代码中指定您自己的值,就可 ...