python selenium-webdriver 等待时间(七)
测试过程中,我们经过发现脚本执行的时候展现出来的效果都是很快结束了,为了观察执行效果我们会增加一个等待时间来观察一下执行效果。这种等待时间我们只是为了我们便于观察,这种情况下是否包含等待时间不会影响我们的执行结果,但是有一种情况会直接影响我们的执行结果。在我们打开一个网站的时候需要由于环境的因素导致页面没有下载完成时,去定位元素此时无法找到元素,这个时候会影响到我们,这个时候我们增加一个等待时间就会显得万分重要。
selenium 主要提供Explicit Waits和Implicit Waits两种模式的等待,但是python time 模块也提供了一种非智能的sleep()等待,这个设置以后必须强制等待设置的时间,只有等待时间结束以后才会继续执行,这种模式我一般会用到观察执行的效果时候,而Explicit Waits和Implicit Waits 这两种我会在实际自动化测试中使用。
下面我们了解一下这种三种等待模式
1.强制等待
强制等待属于python time模块的一种等待,使用时需要引入time模块才可以使用,下面我们看一断代码
#-*- coding:utf-8 -*-
import time
from datetime import datetime
print (datetime.now()) #获取当前时间
time.sleep(10) #设置等待时间10s
print(datetime.now()) #再次获取当前时间
代码很简单,主要是获取当前时候后设置了一个等待时间,然后在等待时间后面设置一个事物,这个事物来查看等待时间结束后的当前时间。通过执行结果我们很好的看到只有执行完毕等待以后才会再次执行下一步骤。

2.隐性等待 implicitly_wait()
什么是隐性的等待呢?所谓的隐性的等待就是我们设置了一个等待时间范围,这个等待的时间是不固定的,最长的等待也莫过于我们设置的最大值。用高考来举个例子,高考的语文是6月7日上午9:00 - 11:30,我们只能在规定的时间内答题交卷,不能超过11:30 交卷,如果我们提前答完卷,那么我们可以提前交卷,那么这里规定的2.5小时是我们设置的最大等待时间,而我们可以再任何时间答完试卷均去交卷,但是我们不能超过11:30交卷,也就是说明最大的答卷时间就是2.5h(正好也是因为此时刚刚高考结束,所以我这边也趁下热度)。
下来我们看段代码
from selenium import webdriver
driver = webdriver.Chrome()
driver.implicitly_wait(10) #这里设置智能等待10s
driver.get('https://www.google.com.hk')
print (driver.title)
driver.quit()
这里主要采用 implicitly_wait(10)方法来设置等待时间,这里要比time.sleep(10)更加智能一些。
说明:首先Implicit Waits默认是等待时间是0,同时隐性等待是对driver起作用,所以只要设置一次即可,没有必要到处设置
3.显示的等待 WebDriverWait()
WebDriverWait()会配合until()和until_not()方法一起使用,根据判断条件而进行灵活进行处理时间等待问题,他会不断的根据你设定的条件去判断,直到超过你设置的等待时间,如果设置的条件满足,然后进行下一步操作,如果没有满足会报一个'selenium.common.exceptions.TimeoutException: Message: '错误,使用WebDriverWait首先需要导入from selenium.webdriver.support.ui import WebDriverWait模块,下面我们看一下实际的代码
#-*- coding:utf-8 -*-
from datetime import datetime
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")
driver.maximize_window()
try:
#为了更好的对比效果,首先我们设置了一个存在的元素,然后在去找一个不存在的元素,同样设置了10s的等待时间
#kw元素存在时
print(datetime.now()) #
element = WebDriverWait(driver,10).until( #until 也属于WebDriverWait,代表一直等待,直到某元素可见,until_not与其相反,判断某个元素直到不存在
EC.presence_of_element_located((By.ID, "kw")) #presence_of_element_located主要判断页面元素kw在页面中存在。
)
#kw111元素不存在时
print(datetime.now())
element = WebDriverWait(driver,10).until(
EC.presence_of_element_located((By.ID, "kw111"))
) finally:
print(datetime.now())
driver.quit()
看下刚才代码的效果

通过运行的结果我们可以看到,id为kw和kw111两个元素,均设置了10s等待时间,当id为kw的元素找到的时候很快就去执行下一步,,找id 为'kw111'元素时,发现无法找到一直等待下去,期间会不断的去巡查,直到超过我们设置的连接超时的时间报一个TimeoutException错误。
在使用显示的等待等待时候我们使用到了Expected Conditions的方法presence_of_element_located,因为该模块设计的内容比较多,我在这里就不详细介绍,后面会单独拿一个专题来介绍该模块。
python selenium-webdriver 等待时间(七)的更多相关文章
- Python+Selenium+webdriver环境搭建(windows)以及相关资源下载链接
今天记录一下测试小菜鸟alter在测试入门的一点关于python+Selenium+webdriver环境搭建的经历以及资源分享.欢迎交流学习,批评指正. 一.Python的下载与安装 1.pytho ...
- python selenium webdriver入门基本操作
python selenium webdriver入门基本操作 未经作者允许,禁止转载! from selenium import webdriver import time driver=webdr ...
- Python Selenium Webdriver常用方法总结
Python Selenium Webdriver常用方法总结 常用方法函数 加载浏览器驱动: webdriver.Firefox() 打开页面:get() 关闭浏览器:quit() 最大化窗口: m ...
- Python+Selenium WebDriver API:浏览器及元素的常用函数及变量整理总结
由于网页自动化要操作浏览器以及浏览器页面元素,这里笔者就将浏览器及页面元素常用的函数及变量整理总结一下,以供读者在编写网页自动化测试时查阅. from selenium import webdrive ...
- windows操作系统python selenium webdriver安装
这几天想搞一个爬虫,就来学习一下selenium,在网上遇见各种坑,特写一篇博文分享一下selenium webdriver的安装过程. 一.安装selenium包 pip install selen ...
- Python selenium webdriver设置js操作页面滚动条
js2 = "window.scrollTo(0,0);" #括号中为坐标 当不知道需要的滚动的坐标大小时: weizhi2 = driver.find_element_by_id ...
- Python + Selenium WebDriver Api 知识回顾
一直再用 Selenium WebDriver 但是用的都比较零散,也没有做过总结,今天借此机会,整理一下,方便大家使用时查阅 webDriver 的属性 ['CONTEXT_CHROME', 'C ...
- Linux环境下搭建python+selenium+webdriver环境
1.下载并安装python,一般安装linux系统,自带有python,则python不用安装.要下载可以在官网上下载: 或者使用下面命令安装: sudo apt-get install python ...
- Python selenium.webdriver.chrome.options.Options() Examples
The following are 27 code examples for showing how to use selenium.webdriver.chrome.options.Options( ...
- python + selenium WebDriver的环境配置
想试用python语言来学习selenium WebDriver,首先需要搭建一个测试环境,从python安装到浏览器插件配置的详细步骤,总结如下: 一.python环境配置 1.从官网下载最新的一个 ...
随机推荐
- Adobe Flash Player 29.0.0.140官方正式版
Adobe Flash Player 29 正式版例行更新,v29.0.0.140 这是最新详细版本号,Adobe采取和微软相似的更新策略,在每个月的第二个周二为产品发布安全更新.Adobe® Fla ...
- NFS、FTP介绍
第二十五课 NFS.FTP介绍 目录 一. NFS介绍 二.NFS服务端安装配置 三.NFS配置选项 四.exportfs命令 五.NFS客户端问题 六.FTP介绍 七.使用vsftpd搭建ftp 八 ...
- PowerDesigner下载安装破解
power designer是Sybase公司为开发人员推出的一款常用的数据库建模工具集,它能对管理信息系统进行分析设计,几乎能完成数据库模型设计的全过程,利用Power Designer不仅可以制作 ...
- SQLServer数据库
分离数据库:右键数据库→任务→分离数据库→确定 附加数据库:数据库右键→任务→附加→选择要附加的dlf文件→附加 导出SQL脚本步骤:右键数据库→任务→生成脚本→高级→要编写脚本的数据的类型→架构和数 ...
- oracle 查询年月日连在一起
SELECT B.YEAR || replace(lpad(B.MONTH, 2), ' ', '0') || replace(lpad(B.WEEK, 2), ' ', '0') from TT_U ...
- shell版的nginx安装
#!/bin/bash # Name:Centos 6.4 安装nginx1.8.1 # Date:-- # Author:qifei@meizu.com Home=$(cd ``;pwd) #这个命 ...
- c#计算器
代码没有大的问题,但是起初点击控件无反应,原因是事件代码要自己敲,不能直接粘贴. using System;using System.Collections.Generic;using System. ...
- @Schedule注解中的Cron表达式读取properties的方法
1.properties文件中增加配置项: datasync.cron=0 */10 * * * ? 2.定时任务类增加PropertySource注解: @PropertySource(" ...
- Centos中MySQL数据的备份和恢复
1.MySQL数据备份 MySQL在Centos备份中用到了mysqldump这个文件,首先得把它找出来: [root@instance-3snz20bz ~]# whereis mysqldump ...
- React事件绑定与解绑
React中事件分类 React中事件绑定分为两种: 1.直接添加在React元素上的事件,这是React在基于Virtual DOM的基础上实现的符合w3c规范的合成事件(SyntheticEven ...