上篇博客讲到了expected_conditions模块(在使用时通常重命名为EC模块),在显式等待WebDriverWait的until和until_not方法中我们经常要用到,它会根据网页标题、网址以及元素是否可见等条件来决定我们是否需要继续等待。我查看了一下源码,根据各大类型对它们做了个整理,方便记忆。

因为要使用 expected_conditions模块中的类,所以第一步肯定是要引入该模块,考虑到引用类时,很多地方都用到了locator定位范围,所以这里我们还要引入必须要引入  selenium.webdriver.common.by  的 By  模块,具体代码如下:

from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

接下来就是相关类的介绍以及简单使用示例:

1、title标题

(1)title_is      网页标题是否显示特定内容(必须完全符合),如果是返回True,否则返回False

result = EC.title_is('百度一下,你就知道')
print(result(self.driver))

(2)title_contains     网页标题是否包含特定内容,如果是返回True,否则返回False

result = EC.title_contains('百度')
print(result(self.driver))

2、url网址

(1)url_contains     网页网址是否包含特定内容,如果是返回True,否则返回False

result = EC.url_contains('baidu')
print(result(self.driver))

(2)url_matches     网页网址是否匹配特定内容,如果是返回True,否则返回False

#url是https://www.baidu.com/
pattern = r'/(\w+):\/\/([^/:]+)(:\d*)?([^# ]*)/' #使用正则表达式,规定网址格式(格式要求以https开头)
result = EC.url_contains(pattern)
print(result(self.driver))

(3)url_to_be      网页网址是否显示特定网址(必须完全符合),如果是返回True,否则返回False

result = EC.url_to_be('https://www.baidu.com')
print(result(self.driver))

(4)url_changes     网页是否更改了,如果是返回True,否则返回False

3、element元素显示与可见

(1)presence_of_element_located    特定元素是否存在于页面DOM树中,如果是,返回该元素(单个元素),否则报错

locator = (By.CLASS_NAME, 'lh')  #定位class='lh'的元素
result = EC.presence_of_element_located(locator)
print(result(self.driver))

(2)presence_of_all_elements_located    定位的元素范围内,是否至少有一个元素存在于页面当中,如果是,返回满足条件的所有元素组成的List,否则返回空List

locator = (By.CLASS_NAME, 'lh')  #定位所有class='lh'的元素
result = EC.presence_of_all_elements_located(locator)
print(result(self.driver))

(3)visibility_of_element_located   特定元素是否存在于DOM树中并可见,如果是返回该元素(单个元素),否则报错

locator = (By.CLASS_NAME, 'hl')
result = EC.visibility_of_element_located(locator)
print(result(self.driver))

        元素可见:元素的高和宽都大于0

注:visibility_of_element_located  与  presence_of_element_located作用类似,但前者无所谓可见与否,所以在性能上略胜一筹。

(4)invisibility_of_element_located  特定元素是否不可访问或不存在于DOM树中,如果不存在则返回True,否则返回True

注:invisibility_of_element_located  刚好与 visibility_of_element_located的作用相反,且返回的结果大不相同。

(5)invisibility_of_element 特定元素是否不可访问或不存在于DOM树中,如果不存在则返回True,否则返回True

注:invisibility_of_element_located 与 invisibility_of_element 作用类似,但前者传的是定位范围locator,后者可以是定位范围(仅text文本),也可以是元素element。

(6)visibility_of  特定元素是否存在于DOM树中并可见,如果是返回该元素(单个元素),否则报错

element = self.driver.find_element_by_id('kw')
result = EC.visibility_of(element)
print(result(self.driver))

注:visibility_of_element_located 与  visibility_of   作用类似,但是前者传入的是定位范围locator,后者传入的是元素element,另外 invisibility_of_element  与  visibility_of   作用相反,且返回的结果大不相同。

(7)visibility_of_any_elements_located   定位的元素范围内,是否至少有一个元素存在于DOM树中并可见,如果是,返回满足条件的所有元素组成的List,否则返回空List

(8)visibility_of_all_elements_located  定位的元素范围内,是否所有元素都存在于DOM树中并且可见,如果是,以List形式返回元素,否则返回False

(9)element_to_be_clickable  特定元素是否可点击,如果可以则返回该元素,否则返回False

locator = (By.ID, 'su') #<su>是一个可点击的按钮
result= EC.element_to_be_clickable(locator)
print(result(self.driver))

(10)staleness_of    特定元素是否不再附加于于DOM树中,如果不再附加返回True,否则返回False

4、text文本

(1)text_to_be_present_in_element  特定文本是否出现在特定元素中,如果是则返回True,否则返回False

locator = (By.ID, 'su')
element = EC.text_to_be_present_in_element(locator, 'submit') #查看<su>中是否包含'submit'
print(element(driver))

(2)text_to_be_present_in_element_value  判断某文本是否是存在于特定元素的value值中,如果是则返回True,否则返回False

locator = (By.ID, 'su')
element = EC.text_to_be_present_in_element_value(locator, '百度一下') #查看<su>的value值中是否包含'百度一下'
print(element(driver))

注:如果该特定元素没有value值,也会返回False

5、frame

(1)frame_to_be_available_and_switch_to_it   frame窗口是否可被切换,如果是返回True,否则返回False

6、Select

(1)element_to_be_selected   特定元素是否被选中,如果是,返回True,否则返回False

element= self.driver.find_element_by_id('select1')
result = EC.element_to_be_selected(locator)
print(result(self.driver))

(2)element_located_to_be_selected

locator = (By.ID, 'checkbox1')
result = EC.element_located_to_be_selected(locator)
print(result(self.driver))

(3)element_selection_state_to_be     特定元素的选中状态是否与预期相同,相同则返回True,不同则返回False

checkbox = self.driver.find_element_by_id('checkbox1')
result = EC.element_selection_state_to_be(checkbox, True) #第二个参数可设置为True或False
print(result(self.driver))

(4)element_located_selection_state_to_be   特定元素的选中状态是否与预期相同,相同则返回True,不同则返回False

locator = (By.ID, ‘checkbox1’)
result = EC.element_located_selection_state_to_be(locator, True) #第二个参数可设置为True或False
print(result(self.driver))

注:element_selection_state_to_be 与  element_located_selection_state_to_be  作用类似,只是传递的参数一个是元素element,一个是作用范围locator。

7、windows窗口

(1)number_of_windows_to_be   特定窗口数和实际窗口数是否一致,如果是返回True,否则返回False

windows = EC.number_of_windows_to_be(2) #期望窗口设置为2个
print(windows(self.driver))

(2)new_window_is_opened  新窗口是否打开,如果是返回True,否则返回False

current_handles = self.driver.window_handles #获得当前所有句柄数量
new_window = EC.new_window_is_opened(current_handles)
print(new_window(self.driver))

8、alert对话框

(1)alert_is_present     弹出框是否存在,如果是,切换到alert,否则返回false

alert = EC.alert_is_present()
#操作alert,例如:关闭alert
alert.accpet()

以上就是我关于expected_conditions模块的全部整理记录,有不对的地方欢迎指正~

Selenium学习之显式等待中的EC模块详解相关推荐

  1. python 显示等待中_Selenium学习之显式等待中的EC模块详解

    上篇博客讲到了expected_conditions模块(在使用时通常重命名为EC模块),在显式等待WebDriverWait的until和until_not方法中我们经常要用到,它会根据网页标题.网 ...

  2. 显式等待中的EC模块详解

    导入模块 from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common ...

  3. spring(7)---深入理解Spring核心技术——Spring中的各模块详解

    深入理解Spring核心技术--Spring中的各模块详解 Spring框架的两个基本概念IOC容器和AOP,相信大家现在对Spring中的这两个部分的基本概念有了一定的认识,好了,那么今天我们就来正 ...

  4. python中json模块博客园_Python中的Json模块详解

    Python中的Json模块详解 Json(JavaScript Object Notation)它是一种轻量级的数据交换格式,具有数据格式简单,读写方便易懂等很多优点.许多主流的编程语言都在用它来进 ...

  5. python中 xlrd/xlwt模块详解

    python中 xlrd/xlwt模块详解 1.什么是xlrd模块 python操作excel主要用到xlrd和xlwt两个库,即xlrd是读excel,xlwt是写excel库 一.安装xlrd模块 ...

  6. C++模版:包含模型、显式实例化、分离模型(详解)

    C++模版:包含模型.显式实例化.分离模型 函数和类类型声明和定义的实质 非模板类类型的分文件定义 test.cpp: #include "test.h" #include < ...

  7. Pycharm中导入requests模块详解

    这篇文章主要介绍了教你如何在Pycharm中导入requests模块,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下 1.找到python的安装路径: 如果忘 ...

  8. Python中使用httpx模块详解

    导入httpx In [25]: import httpx 获取一个网页 In [26]: r = httpx.get("https://httpbin.org/get")In [ ...

  9. Node.js中的child_process模块详解

    本文主要给大家介绍了关于Node.js中child_process模块的相关内容,在介绍child_process模块之前,先来看一个例子. const http = require('http'); ...

最新文章

  1. C# 36进制转10进制
  2. CVPR2021|深度感知镜面分割方法(RGBD数据)
  3. torch max 判断与筛选
  4. python控制语句第一章_【原创】Python第一章
  5. [原创]2014年上半年测试书籍推荐
  6. Jakarta EE工作组正式成立
  7. 在odoo服务器文件夹,在windows10上安装odoo12开发环境的方法
  8. 关于自学的又一点思考
  9. 【Python数据分析】用户通话行为分析
  10. bochs安装win98
  11. Latex图表设置中英文双标题(非ccaption宏包)
  12. 2022年氧化工艺考试练习题模拟考试平台操作
  13. 广西行政村数据shp_广西自治区乡镇行政区划数据 精度1:10万
  14. 阿里犸良导出的json文件怎么使用
  15. 前端---HTML QQ空间主页制作
  16. ecshop smarty php,ecshop的smarty基础普及知识
  17. ftp主动模式和被动模式的区别
  18. 今天,你成为这1/1000000了吗
  19. 简单Thinkphp5.1如何使用Topsdk\Topapi
  20. APP全流程框架总结

热门文章

  1. 验证哥德巴赫猜想(C++)
  2. 排序算法之——归并排序 C语言实现
  3. 加油站的良好出发点问题
  4. CSDN日报190805:一线城市or二线城市,该如何抉择?
  5. 人人都能学会的英语2:音标
  6. 从 0 到 1 上手 Web Components 业务组件库开发
  7. 道路分割 matlab,MATLAB图像的道路分割技术研究
  8. 基于D2Admin 简化模板自己做的前端系统 (三)
  9. PC模拟仿真LVGL(CodeBlocks环境)
  10. MySQL的索引和存储引擎