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 MD5文件生成码
Jan 12 Python
在Docker上部署Python的Flask框架的教程
Apr 08 Python
win系统下为Python3.5安装flask-mongoengine 库
Dec 20 Python
回调函数的意义以及python实现实例
Jun 20 Python
Django中的Model操作表的实现
Jul 24 Python
基于python实现聊天室程序
Jul 27 Python
Python实用库 PrettyTable 学习笔记
Aug 06 Python
Python如何基于selenium实现自动登录博客园
Dec 16 Python
python多项式拟合之np.polyfit 和 np.polyld详解
Feb 18 Python
Python的Django框架实现数据库查询(不返回QuerySet的方法)
May 19 Python
Python logging日志模块 配置文件方式
Jul 12 Python
详解Python3.8+PyQt5+pyqt5-tools+Pycharm配置详细教程
Nov 02 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中for循环语句的几种变型
2007/03/16 PHP
删除数组元素实用的PHP数组函数
2008/08/18 PHP
PHP用mysql数据库存储session的代码
2010/03/05 PHP
php一次性删除前台checkbox多选内容的方法
2013/09/22 PHP
Nginx环境下PHP flush失效的解决方法
2016/10/19 PHP
PHP连接sftp并下载文件的方法教程
2018/08/26 PHP
js下用eval生成JSON对象
2010/09/17 Javascript
VBS通过WMI监视注册表变动的代码
2011/10/27 Javascript
jQuery插件原来如此简单 jQuery插件的机制及实战
2012/02/07 Javascript
javascript 三种方法实现获得和设置以及移除元素属性
2013/03/20 Javascript
JQuery给元素添加/删除节点比如select
2013/04/02 Javascript
jquery制作 随机弹跳的小球特效
2015/02/01 Javascript
AngularJS内置指令
2015/02/04 Javascript
javascript实现设置、获取和删除Cookie的方法
2015/06/01 Javascript
js实现Form栏显示全格式时间时钟效果代码
2015/08/19 Javascript
JS中创建函数的三种方式及区别
2016/03/13 Javascript
工作中比较实用的JavaScript验证和数据处理的干货(经典)
2016/08/03 Javascript
JS实现自动阅读单词(有道单词本添加功能)
2016/11/14 Javascript
微信小程序 图片边框解决方法
2017/01/16 Javascript
javascript基于定时器实现进度条功能实例
2017/10/13 Javascript
在vue项目中引入高德地图及其UI组件的方法
2018/09/04 Javascript
微信小程序绑定手机号获取验证码功能
2019/10/22 Javascript
JavaScript接口实现方法实例分析
2020/05/16 Javascript
Python开发WebService系列教程之REST,web.py,eurasia,Django
2014/06/30 Python
Django原生sql也能使用Paginator分页的示例代码
2017/11/15 Python
Python cookbook(数据结构与算法)对切片命名清除索引的方法
2018/03/13 Python
python获取磁盘号下盘符步骤详解
2019/06/19 Python
django 类视图的使用方法详解
2019/07/24 Python
Python实现元素等待代码实例
2019/11/11 Python
python标准库OS模块函数列表与实例全解
2020/03/10 Python
使用html5 canvas 画时钟代码实例分享
2015/11/11 HTML / CSS
DNA基因检测和分析:23andMe
2019/05/01 全球购物
爱岗敬业演讲稿
2014/05/05 职场文书
幼儿园师德师风学习材料
2014/05/29 职场文书
eval(cmd)与eval($cmd)的区别与联系
2021/07/07 PHP
Django框架中模型的用法
2022/06/10 Python