Python3+Selenium3自动化测试-(六)
这里来说一说selenium中的等待方式,其实在webdriver只有两种类型等待方式,显式等待和隐式等待,之前是在程序运行过程中使用time模块中的sleep进行代码的休眠进行强制等待,是显式等待中的一种极端情况。
Time.sleep
通过time模块中sleep进行代码的暂停,但是实际使用过程中,如果都以sleep进行控制严重影响了程序的运行。
# coding=utf-8
# 强制等待——代码休眠
import time from selenium import webdriver driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
time.sleep(3) driver.quit()
显式等待
显式等待是你在代码中定义等待一定条件发生后再进一步执行你的代码。
示例:
# coding=utf-8 from time import ctime
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 dr = webdriver.Chrome()
dr.get('https://www.baidu.com') try:
print(ctime())
element = WebDriverWait(dr, 10).until(
EC.presence_of_element_located((By.ID, "kw"))
)
# WebDriverWait(driver=self.driver, timeout=300, poll_frequency=0.5, ignored_exceptions=None)
# driver:浏览器驱动
# timeout:最长超时等待时间
# poll_frequency:检测的时间间隔,默认为500ms
# ignore_exception:超时后抛出的异常信息,默认情况下抛 NoSuchElementException 异常
print("我已找到")
finally:
print(ctime())
dr.quit()
执行结果:

以上代码执行后就发现,整段代码执行速度非常快,即使我在WebDriverWait中设置10秒,也不会等待10秒的情况,因为在不到一秒内,已经完成了加载并定位id为“kw”的元素。
通过WebDriverWait 和 ExpectedCondition 组合使用,让我们的代码执行只需要等待需要的时长,而不是固定的时长,这样最大限度的节省时间。
此外ExpectedCondition类中提供了很多预期条件判断方法,省去了再创建包的功夫:
1 """
2 title_is:判断当前页面的title是否等于预期
3 title_contains:判断当前页面的title是否包含预期字符串
4 presence_of_element_located:判断某个元素是否被加到了dom树里,并不代表该元素一定可见
5 visibility_of_element_located:判断某个元素是否可见. 可见代表元素非隐藏,并且元素的宽和高都不等于0
6 visibility_of:跟上面的方法做一样的事情,只是上面的方法要传入locator,这个方法直接传定位到的element就好了
7 presence_of_all_elements_located:判断是否至少有1个元素存在于dom树中。举个例子,如果页面上有n个元素的class都是'column-md-3',那么只要有1个元素存在,这个方法就返回True
8 text_to_be_present_in_element:判断某个元素中的text是否 包含 了预期的字符串
9 text_to_be_present_in_element_value:判断某个元素中的value属性是否包含了预期的字符串
10 frame_to_be_available_and_switch_to_it:判断该frame是否可以switch进去,如果可以的话,返回True并且switch进去,否则返回False
11 invisibility_of_element_located:判断某个元素中是否不存在于dom树或不可见
12 element_to_be_clickable - it is Displayed and Enabled:判断某个元素中是否可见并且是enable的,这样的话才叫clickable
13 staleness_of:等某个元素从dom树中移除,注意,这个方法也是返回True或False
14 element_to_be_selected:判断某个元素是否被选中了,一般用在下拉列表
15 element_located_to_be_selected
16 element_selection_state_to_be:判断某个元素的选中状态是否符合预期
17 element_located_selection_state_to_be:跟上面的方法作用一样,只是上面的方法传入定位到的element,而这个方法传入locator
18 alert_is_present:判断页面上是否存在alert
19 """
另外这里使用了until()函数也可以使用until_not()
隐式等待
如果某些元素不是立即可用的,隐式等待是告诉WebDriver去等待一定的时间后去查找元素。
# coding=utf-8 from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from time import ctime driver = webdriver.Firefox() # 设置隐式等待为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()
这里可以看到在10秒内没有找到想要找到的元素,但是依旧执行了10秒,然后报错,如果修改代码为可以找到,代码执行非常迅速。
implicitly_wait()默认参数的单位为秒,本例中设置等待时长为10秒。首先这10秒并非一个固定的等待时间,它并不影响脚本的执行速度。其次,它并不针对页面上的某一元素进行等待。当脚本执行到某个元素定位时,如果元素可以定位,则继续执行;如果元素定位不到,则它将以轮询的方式不断地判断元素是否被定位到。假设在第6秒定位到了元素则继续执行,若直到超出设置时长(10秒)还没有定位到元素,则抛出异常。
好像也没有很复杂……
Python3+Selenium3自动化测试-(六)的更多相关文章
- Python3+Selenium3自动化测试-(准备)
Python3+Selenium3自动化测试-(准备) 最近在学习selenium自动化测试相关的内容,所以将实际准备情况做一记录, # 系统:win10(64位) # 浏览器:Chrome(67.0 ...
- Python3+Selenium3自动化测试-(二)
python3 元素定位和操作方法总结 # coding=utf-8 ''' #8种元素定位方法 find_element_by_id() find_element_by_name() find_el ...
- Python3+Selenium3自动化测试-(八)
使用selenium进行测试,当然是需要进行验证的,此时结合python的断言函数就变得非常有用了.测试中设定好预期,当实际情况与预期有差别,给出错误信息,好像正是所希望的. 来一段简单的代码看下断言 ...
- Python3+Selenium3自动化测试-(五)
这里来说一说selenium中的等待方式,其实在webdriver只有两种类型等待方式,显式等待和隐式等待,之前是在程序运行过程中使用time模块中的sleep进行代码的休眠进行强制等待,是显式等待中 ...
- Python3+Selenium3自动化测试-(四)
selenium鼠标事件 # coding=utf-8 import time from selenium import webdriver from selenium.webdriver.commo ...
- Python3+Selenium3自动化测试-(三)
selenium键盘事件 #coding=utf-8 from selenium import webdriver import time from selenium.webdriver.common ...
- Python3+Selenium3自动化测试-(一)
完成环境的安装并测试之后,我们对Selenium有了一定的了解了,接下来我们继续驱动浏览器做一些基本操作: 窗口尺寸设置.网页截图.刷新.前进和后退 窗口尺寸设置 在测试过程中,我们可能会要求打开浏览 ...
- Python3+Selenium3自动化测试-(九)
selenium的学习拖拉了很久,内容也是较基础的部分,实际应用时查询文档也是OK的,当然,整理出来会更有利于我们在实际使用时去应用. 所以这一篇把官方的API文档进行解读整理,在看完这些API,将能 ...
- Python3+Selenium3自动化测试-(七)
在实际定位元素的过程中,发现有一种情况让人很是恼火,根据xpath路径定位,感觉像是没错哦,但是执行时就来一个报错信息--为什么呢? 多表单切换 例如我们登录网易邮箱时就会发现,定位登录框时,一个嵌套 ...
随机推荐
- maven的下载、安装、配置,idea中配置Maven
下载 下载链接: 点击下载地址 : 找到:对应版本的包下载 安装 下载后的压缩包解压出来,然后将解压后的包放到日常安装软件的位置即安装成功,当然取决于个人意愿,也可以不移动. 打开安装包后的目录结构简 ...
- 图数据 3D 可视化在 Explorer 中的应用
本文首发于 NebulaGraph 公众号 前言图数据可视化是现代 Web 可视化技术中比较常见的一种展示方式,NebulaGraph Explorer 作为基于 NebulaGraph 的可视化产品 ...
- Python基础之面向对象:1、面向对象及编程思想
一.人狗大战 1.需求 用代码模拟人.狗打架的小游戏 人和狗种类不同,因此双方的属性各不相同 推导一: 人和狗各有不同属性 使用字典方式储存属性较为方便,并可储存多种属性 # 1.在字典内储存'人'属 ...
- h5 websocket 断开重新连接
最近的项目中使用ws 长连接来接收和发送消息, 直接上代码 import * as SockJS from "sockjs-client"; import Stomp from & ...
- webpack -- element-ui 的按需引入
简单说明原理: 使用babel-plugin-component实现按需引入.打包.将webpack配置成多入口,保证最终打包的目录结构符合babel-plugin-component插件的要求,实现 ...
- Nginx的概述和配置
一.Nginx概述 1.1Nginx的特点 (1)一款高性能.轻量级web服务 稳定性高 系统资源消耗低高 对HTTP并发连接的处理能力 (2)单台物理服务器可支持30000~50000个并发请求 1 ...
- Python图像处理丨5种图像处理特效
摘要:本篇文章主要讲解了图像常见的特效处理,从处理效果图.算法原理.代码实现三个步骤进行详细讲解,涉及图像素描特效.怀旧特效.光照特效.流年特效.图像滤镜等. 本文分享自华为云社区<[Pytho ...
- scrapy框架命令
scrapy startproject #创建scrapy项目 scrapy genspider test www.baidu.com #在项目下的spider目录下生成爬虫文件 test爬虫名称 w ...
- webapi+vue跨域session丢失解决方法
前后端分离中在webapi设置可以跨域,在web.config文件中添加 <httpProtocol> <customHeaders> <ad ...
- DHorse操作手册
在介绍DHorse的操作之前,我们先来看一下发布一个系统的流程是什么样的. 发布系统的流程 我们以一个Springboot系统为例,来说明一下发布流程. 1.首先从代码仓库下载代码,比如Gitlab: ...