Selenium 2自动化测试实战13(设置元素等待)
一、设置元素等待
若在加载某个元素时延迟而造成的ElementNotVisbleException的情况出现,那么就会降低自动化脚本的稳定性,可以通过设置元素等待改善这种问题造成的不稳定。
webdriver提供了两种类型的等待:显示等待和隐示等待
1. 显示等待
显示等待是webdriver等待某个条件成立时继续执行,否则在达到最大时长时抛弃超时异常(TimeoutException)。
#coding:utf-8 from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC driver=webdriver.Chrome()
driver.get("http://www.baidu.com") element=WebDriverWait(driver,5,0.5).until(EC.presence_of_element_located((By.ID,"kw"))) element.send_keys('selenium')
driver.quit()
WebDriverWait类是由WebDriver提供的等待方法。在设置时间内,默认每隔一段时间检测一次当前页面元素是否存在,如果超过设置时间检测不到则抛出异常。具体格式如下:
WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exceptions=None)
(1)driver:浏览器驱动
(2)timeout:最长超时时间,默认以秒为单位。
(3)poll_frequency:检测的间隔(步长)时间,默认为0.5S
(4)ignored_exceptions:超时后的异常信息,默认情况下抛NoSuchElementException异常。
WebDriverWait()一般由until()和until_not()方法配合使用,下面是until()和until_not()方法的说明。
until(method,message='')
调用该方法提供的驱动程序作为一个参数,直到返回值为True
until_not(method,message='')
调用该方法提供的驱动程序作为一个参数,直到返回值为False
在本例中,通过as将excepted_conditions重命名为EC,并调用presence_of_element_located()方法判断元素是否存在。
Expected_conditions类所提供的预期条件判断的方法如下所示

除excepted_conditions所提供的丰富的预期条件判断方法外,还可以使用is_displayed()方法来判断元素是否可见。
#coding:utf-8
from selenium import webdriver
from time import sleep,ctime driver=webdriver.Chrome()
driver.get("http://www.baidu.com") print(ctime()) for i in range(10):
try:
e1=driver.find_element_by_id("kw22")
if e1.is_displayed():
break
except:pass
sleep(1)
else:
print "time out" driver.quit()
print (ctime())
相对来说,这种方式更容易理解,通过for循环10次,每次循环判断元素的is_displayed()状态是否为True:如果为True,则break跳出循环;否则sleep(1)后继续循环判断,知道10次循环结束后,打印“time out”信息。
2. 隐示等待
隐示等待是通过一定的时长等待页面上某元素加载完成。如果超出了设置的时长元素还没有被加载,则抛出NoSuchElementException异常。
webdriver提供了implicitly_wait()方法来实现隐示等待。默认设置为0.
#coding:utf-8
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from time import ctime driver=webdriver.Chrome() #设置隐示等待为10秒
driver.implicitly_wait(10)
driver.get("http://www.baidu.com") try:
print( ctime())
driver.find_element_by_id("kw22").send_keys("selenium")
except NoSuchElementException as e:
print e
finally:
print ctime()
driver.quit()
Implicitly_wait()默认参数的单位为秒,本例中设置等待时长为10秒,首先这10秒并非一个固定的等待时间,它并不影响脚本的执行速度。其次,它并不针对页面上的某一元素进行等待。当脚本执行到某个元素定位时,如果元素可以定位,则继续执行;如果元素定位不到,则它将以轮询的方式不断地判断元素是否被定位到。假设在第6秒定位到了元素则继续执行,若直到超出设置时长(10秒)还没有定位到元素,则抛出异常。
在本例中,显然id=kw22是有误的,通过打印的两个时间可以看出,当执行对百度输入框的操作时,超过了10秒的等待。
3. sleep休眠方法
脚本调试过程中,希望脚本在执行到某一位置时做固定时间的休眠,则可以使用sleep()方法
#coding:utf-8
from selenium import webdriver
from time import sleep driver=webdriver.Chrome()
driver.get("http://www.baidu.com") sleep(2)
driver.find_element_by_id("kw").send_keys("webdriver")
driver.find_element_by_id("su").click()
sleep(3) driver.quit()
当执行到sleep()方法时会固定休眠一定的时长,然后再继续执行。sleep()方法默认参数以秒为单位,如果设置时长小于1秒,则可以用小数表示,如sleep(0.5)表示休眠0.5秒
Selenium 2自动化测试实战13(设置元素等待)的更多相关文章
- selenium webdriver——设置元素等待
如今大多数Web应用程序使用ajax技术,当浏览器在加载页面时,页面上的元素可能并不是同时被加载完成,这给定位元素的定位增加了困难, 如果因为在加载某个元素时延迟而造成ElementNotVisibl ...
- Selenium(十一):设置元素等待、上传文件、下载文件
1. 设置元素等待 前面我们接触了几个元素等待方法,sleep.implicitly_wait方法,这一章我们就来整体学一下. 现在大多数Web应用程序使用的都是AJAX技术.当浏览器加载页面时,页面 ...
- Selenium 与自动化测试 —— 《Selenium 2 自动化测试实战》读书笔记
背景 最近在弄 appium,然后顺便发现了 Selenium 框架和这本书,恰好这本书也介绍了一些软件测试&自动化测试的理论知识,遂拿过来学习学习.所以本文几乎没有实践内容,大多都是概念和工 ...
- Selenium 2自动化测试实战3(函数、类和方法)
一.函数.类和方法1.函数在python中通过def关键字来定义函数 创建一个add()函数,此函数接收两个参数a,b,通过print()打印a+b的结果.调用add()函数,并且上传两个参数3,5给 ...
- Selenium 2自动化测试实战
Selenium 2自动化测试实战 百度网盘 链接:https://pan.baidu.com/s/1aiP3d8Y1QlcHD3fAlEj4sg 提取码:jp8e 复制这段内容后打开百度网盘手机Ap ...
- 《Selenium 2自动化测试实战 基于Python语言》中发送最新邮件无内容问题的解决方法
虫师的<Selenium 2自动化测试实战 基于Python语言>是我自动化测试的启蒙书 也是我推荐的自动化测试入门必备书,但是书中有一处明显的错误,会误导很多读者,这处错误就是第8章自动 ...
- Python +selenium之设置元素等待
注:本文转载http://www.cnblogs.com/mengyu/p/6972968.html 当浏览器在加载页面时,页面上的元素可能并不是同时被加载完成,这给元素的定位增加了困难.如果因为在加 ...
- Python+Selenium笔记(十):元素等待机制
(一) 前言 突然的资源受限或网络延迟,可能导致找不到目标元素,这时测试报告会显示测试失败.这时需要一种延时机制,来使脚本的运行速度与程序的响应速度相匹配,WebDriver为这种情况提供了隐式等待 ...
- Selenium - 设置元素等待
一.sleep () 休眠方法 --time 固定等待 在开发自动化框架过程中,最忌讳使用Python自带模块的time的sleep方法进行等待,虽然可以自定义等待时间,但当网络条件良好时, 依旧 ...
随机推荐
- 第01章 部署虚拟环境安装Linux系统
在VMware中安装RHEL系统和其它Linux系统一样,注意的是: ……前边一直操作下边的步骤后: 重启系统后将看到系统的初始化界面,单击 LICENSE INFORMATION 选项. 选中 I ...
- 使用NPOI或POI 导出Excel大数据(百万级以上),导致内存溢出的解决方案(NPOI,POI)
使用工具:POI(JAVA),NPOI(.Net) 致谢博主 Crazy_Jeff 提供的思路 一.问题描述: 导出任务数据量近100W甚至更多,导出的项目就会内存溢出,挂掉. 二.原因分析: 1.每 ...
- python之路-笔录2[CSS&JS]
*** 目录 *** 1. 块级标签与行内标签 2. css常用清除样式 3. 两种清除浮动的方式 4. CSS学习 5. JS 学习 *** END *** 1. 块级标签与行内标签 常见的块级元素 ...
- cookie的使用以及cookie的跨域名获取
cookie存放容量4k左右,可设置过期时间. 1.cookie的封装使用 //设置cookies function setCookie(name, value) { var Days = 30; v ...
- dlsym用法
1. 包含头文件 #include<dlfcn.h> 2. 函数定义 void *dlsym(void *handle, const char* symbol); handle是使用dlo ...
- 【leetcode】1260. Shift 2D Grid
题目如下: Given a 2D grid of size n * m and an integer k. You need to shift the grid k times. In one shi ...
- 【leetcode】1259.Handshakes That Don't Cross
题目如下: 解题思路:动态规划.记dp[i] = v表示由i个人组成的圈子一共有v种握手的方法.对于一个由n个人组成的圈子,编号为0的人一共可以和编号为 (1,3,5....,n-1)的握手,这也很好 ...
- mvc api 关于 post 跟get 请求的一些想法[FromUri] 跟[FromBody] 同一个控制器如何实现共存
wep api 在设置接收请求参数的时候,会自动根据模型进行解析. [FromUrl] 跟[FromBody] 不可以同时使用. 要拆分开: [HttpGet] public object GetP ...
- Vue:列表展开和收起(超过一定行数时显示‘查看更多’按钮)
前言:前端小白记录的一些小功能~ 公司开发中的小程序中有做任务签到的功能,这就涉及到了任务列表以及对任务列表的展开和收起功能,好了可以开始了,说多了就烦了 1.首先是css样式,因为设计稿上是超过两行 ...
- head first 设计模式笔记4-工厂模式(简单工厂、工厂方法、抽象工厂)
1.简单工厂模式 Pizza public abstract class Pizza { abstract void prepare(); abstract void bake(); abstract ...