Expected conditions模块使用方法汇总代码解析


Posted in Python onAugust 13, 2020

一、expected_conditions模块是什么?

是Selenium的一个子模块,selenium.webdriver.support.expected_conditions

可以对网页上元素是否存在,可点击等等进行判断,一般用于断言或与WebDriverWait配合使用

二、expected_conditions模块简单应用

2.1 WebDriverWait与expected_conditions配合使用实例一

import os
import time
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()
driver.get('https://www.baidu.com')

# 等待10s,等待过程中判断网页标题是否是"百度一下,你就知道"
# 如果是就继续执行后续代码,反之等待10s结束时报错
WebDriverWait(driver,10).until(EC.title_is("百度一下,你就知道"))

2.2 WebDriverWait与expected_conditions配合使用实例二

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

driver = webdriver.Chrome()
driver.get('https://www.baidu.com')
#等待10s,等待过程中如果定位到元素,就直接执行后续的代码,反之等待10s后报错误信息
element = WebDriverWait(driver,10).until(EC.visibility_of(driver.find_element(By.ID,'kw')))
element.send_keys( '新梦想软件测试' )

2.3 unittest与expected_conditions配合使用实例

import time
import unittest
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC

class TestDemo(unittest.TestCase):
  def setUp(self) :
    self.driver = webdriver.Chrome()
  def tearDown(self):
    time.sleep(2)
    self.driver.quit()

  def test_searchinputbox_is_visibility(self):
    self.driver.get('https://www.baidu.com')
    #EC.visibility_of()判断元素是否可见,如果可见就返回这个元素 
    self.assertTrue(EC.visibility_of(self.driver.find_element(By.ID,'kw')))
if __name__=='__main__':
  unittest.main()

实例小结:

实例一与实例二中用到了显式等待 WebDriverWait类,该块不在此文中介绍;

实例三中self.assertTrue()方法断言括号内的表达式返回值是否为ture,在python中代表true的为 非0、非空、true,而

EC.visibility_of()方法中的定位方法能定位到元素就会返回一个对象,满足非空为true,所以断言会通过;

注意EC.visibility_of()方法返回的对象非真实元素对象,所以不能执行如下代码:(正确方式参照实例二的写法)

element = EC.visibility_of(self.driver.find_element(By.ID,'kw'))
element.send_keys('newdream')

三、expected_conditions模块用法汇总

#判断当前页面的title是否精确等于预期,返回布尔值
WebDriverWait(driver,10).until(EC.title_is("百度一下,你就知道"))
#判断当前页面的title是否包含预期字符串,返回布尔值
WebDriverWait(driver,10).until(EC.title_contains('new'))
#判断当前页面的url是否精确等于预期,返回布尔值
WebDriverWait(driver,10).until(EC.url_contains('https://www.baidu.com'))
#判断当前页面的url是否包含预期字符串,返回布尔值
WebDriverWait(driver,10).until(EC.url_contains('baidu'))
#判断当前页面的url是否满足字符串正则表达式匹配,返回布尔值
WebDriverWait(driver,10).until(EC.url_matches('.+baidu.+'))
#判断元素是否出现,只要有一个元素出现,返回元素对象
WebDriverWait(driver,10).until(EC.presence_of_element_located((By.ID,'kw')))
#判断元素是否可见,返回元素对象
WebDriverWait(driver,10).until(EC.visibility_of(driver.find_element(By.ID,'kw')))
#判断元素是否包含指定文本,返回布尔值
WebDriverWait(driver,10).until(EC.text_to_be_present_in_element((By.NAME,'tj_trnews'),'新闻'))
#判断该frame是否可以switch进去,如果可以的话,返回True并且switch进去
WebDriverWait(driver,10,).until(EC.frame_to_be_available_and_switch_to_it(By.xpath,'//iframe'))
#判断某个元素是否可见并且是可点击的,如果是的就返回这个元素,否则返回False
WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.NAME,'tj_trnews')))
#判断某个元素是否被选中,一般用在下拉列表
WebDriverWait(driver,10).until(EC.element_to_be_selected(driver.find_element(By.xpath,'//input[@type="checkbox"]')))
#判断页面上是否存在alert,如果有就切换到alert并返回alert的内容
WebDriverWait(driver,10).until(EC.alert_is_present())

备注:以上整理大家要注意参数和返回值,部分参数是元素对象,部分是locator的元组,如(By.NAME,'tj_trnews')

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python中的break、continue、exit()、pass全面解析
Aug 05 Python
python之matplotlib学习绘制动态更新图实例代码
Jan 23 Python
Sublime开发python程序的示例代码
Jan 24 Python
python kmeans聚类简单介绍和实现代码
Feb 23 Python
python使用sqlite3时游标使用方法
Mar 13 Python
基于python OpenCV实现动态人脸检测
May 25 Python
python 自动去除空行的实例
Jul 24 Python
Python实现多态、协议和鸭子类型的代码详解
May 05 Python
使用python实现简单五子棋游戏
Jun 18 Python
在Python函数中输入任意数量参数的实例
Jul 16 Python
selenium WebDriverWait类等待机制的实现
Mar 18 Python
django xadmin action兼容自定义model权限教程
Mar 30 Python
深入了解Python装饰器的高级用法
Aug 13 #Python
python高级特性简介
Aug 13 #Python
Pytest如何使用skip跳过执行测试
Aug 13 #Python
matplotlib基础绘图命令之bar的使用方法
Aug 13 #Python
Python logging模块原理解析及应用
Aug 13 #Python
matplotlib基础绘图命令之imshow的使用
Aug 13 #Python
使用jupyter notebook运行python和R的步骤
Aug 13 #Python
You might like
PHP+Mysql+jQuery实现发布微博程序 jQuery篇
2011/10/08 PHP
php数组去重复数据示例
2014/02/25 PHP
php身份证号码检查类实例
2015/06/18 PHP
php使用pecl方式安装扩展操作示例
2019/08/12 PHP
不用ajax实现点击文字即可编辑的方法
2007/12/16 Javascript
ajax 同步请求和异步请求的差异分析
2011/07/04 Javascript
JavaScript子窗口ModalDialog中操作父窗口对像
2012/12/11 Javascript
javascript错误的认识不用关心内存管理
2012/12/15 Javascript
按钮接受回车事件的三种实现方法
2014/06/06 Javascript
分享一个自己写的简单的javascript分页组件
2015/02/15 Javascript
易被忽视的js事件问题总结
2016/05/14 Javascript
解析JavaScript中的字符串类型与字符编码支持
2016/06/24 Javascript
一道优雅面试题分析js中fn()和return fn()的区别
2016/07/05 Javascript
基于MVC5和Bootstrap的jQuery TreeView树形控件(二)之数据支持json字符串、list集合
2016/08/11 Javascript
Javascript中字符串和数字的操作方法整理
2017/01/22 Javascript
js仿小米手机上下滑动效果
2017/02/05 Javascript
基于JS实现移动端左滑删除功能
2017/07/28 Javascript
vue中mint-ui的使用方法
2018/04/04 Javascript
微信小程序使用自定义组件导航实现当前页面高亮
2020/01/02 Javascript
为Python的web框架编写MVC配置来使其运行的教程
2015/04/30 Python
Python简单计算文件夹大小的方法
2015/07/14 Python
Python2和Python3中print的用法示例总结
2017/10/25 Python
python 自动去除空行的实例
2018/07/24 Python
Flask框架工厂函数用法实例分析
2019/05/25 Python
Python中函数参数匹配模型详解
2019/06/09 Python
Python3 filecmp模块测试比较文件原理解析
2020/03/23 Python
Html5 webview元素定位工具的实现
2020/08/07 HTML / CSS
阿玛尼美国官方网站:Armani.com
2016/11/25 全球购物
党员身份证明材料
2015/06/19 职场文书
2015大学生入党个人自传
2015/06/26 职场文书
公司回复函格式
2015/07/14 职场文书
初中物理教学反思
2016/02/19 职场文书
Python Django 后台管理之后台模型属性详解
2021/04/25 Python
如何使JavaScript休眠或等待
2021/04/27 Javascript
Matplotlib可视化之添加让统计图变得简单易懂的注释
2021/06/11 Python
MySQL日期时间函数知识汇总
2022/03/17 MySQL