python3+selenium入门07-元素等待
在使用selenium进行操作时,有时候在定位元素时会报错。这可能是因为元素还没有来得及加载导致的。可以等过元素等待,等待元素出现。有强制等待,显式等待,隐式等待。
强制等待
就是之前文章中的time.sleep(),只是为了看到界面操作效果才那样设置的。这个是不管找没找到都会等待的。基本代码中不会用这个。
显式等待
WebDriverWait类是WebDriver提供的等待方法。在设置的时间内,会每隔一段时间去检查一次当前页面元素是否存在,如果超过设置时间还没有见到到就抛出异常。具体格式如下:
需要先导入from selenium.webdriver.support.wait import WebDriverWait
WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exceptions=None)
driver:浏览器实例
timeout:超时时间,默认已秒为单位
poll_frequency:检测时间间隔,默认0.5秒
ignored_exceptions:报错信息,默认抛出NoSuchElementException
一般是配合until()和until_not()方法使用
until():可以传两个参数,第一个参数是判断条件,直到第一个参数返回True。第二个参数可以写文字说明。
until_not():可以传两个参数,第一个参数是判断条件,直到第二个参数返回False。第二个参数可以写文字说明
expected_conditions类下提供预期条件判断方法,具体有哪些方法可以自己查下,以title_is()方法举例,对比title是否正确的。
需要先导入from selenium.webdriver.support import expected_conditions
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions
dr = webdriver.Chrome()
dr.maximize_window()
dr.get("https://www.baidu.com")#打开百度
tr = dr.title#获取title
wait = WebDriverWait(dr,10)#实例化显示等待,设置等待时间10秒
s = wait.until_not(expected_conditions.title_is(tr),'出错了')#对比title
print(s)
因为title肯定一致,返回的是True,所以until_not()肯定不会对。会一直等待着,直到10秒结束。可以改成until()再看下。
隐式等待
WebDriver类下的implicitly_wait()方法可以设置隐式等待。这个只会在脚本进行元素定位相关的时候执行,会在设置的时间内不断的判断这个元素是否被找到了
from selenium import webdriver
from time import ctime
dr = webdriver.Chrome()
dr.maximize_window()
dr.implicitly_wait(10)
try:
dr.get("https://www.baidu.com")#打开百度
print(ctime())
tr = dr.find_element_by_id('kw123')
except BaseException as f:
print(f)
print(ctime())
finally:
dr.close()
因为没有一个id是叫kw123,所以肯定会找不到,通过秒数可以看到等待了10秒。
一般这个用的比较多,在浏览器初始化之后设置。之后所有定位元素的操作,都会有等待时间的设置。
python3+selenium入门07-元素等待的更多相关文章
- selenium webdriver——设置元素等待
如今大多数Web应用程序使用ajax技术,当浏览器在加载页面时,页面上的元素可能并不是同时被加载完成,这给定位元素的定位增加了困难, 如果因为在加载某个元素时延迟而造成ElementNotVisibl ...
- Selenium 3----设置元素等待
在做Web应用的自动化测试时,定位元素必不可少,这个过程经常出现定位不到元素的情况,常见原因有哪些呢? 1.描述错误 提高编写水平.细心 2.Frame/Iframe框架原因 在元素所在框架里定位该元 ...
- selenium学习之元素等待(四)
--为什么要设置元素等待: 目前大多数web应用程序都是使用AJAX和JavaScript开发,每次加载一个网页,包括静态网页和动态网页,也就是加载各种HTML标签和JS文件.在网页中进行元素定位时, ...
- python3+selenium入门05-元素操作及常用方法
学习了元素定位之后,来看一些元素的操作,还有一些常用的方法 clear()清空输入框内容 click()点击 send_keys()键盘输入 import time from selenium imp ...
- python3+selenium入门01-环境搭建
作为一个测试,在最近两年应该有明显的感觉.那就是工作变的难找,要求变的高了,自动化测试,性能测试等.没有自动化测试能力,只会点点点工作难找不说,工资也不高.所以还是要学习一些技术.首先要学习一门编程语 ...
- selenium - webdriver - 设置元素等待
隐式等待:implicitly_wait(value), value默认是0 from selenium import webdriverfrom selenium.common.exceptions ...
- selenium - 三种元素等待
1.sleep 休眠方法 sleep()由python的time模块提供. 当执行到sleep()方法时,脚本会定时休眠所设置的时长,sleep()方法默认参数是s(秒),sleep(2) 表示休眠2 ...
- Python +selenium之设置元素等待
注:本文转载http://www.cnblogs.com/mengyu/p/6972968.html 当浏览器在加载页面时,页面上的元素可能并不是同时被加载完成,这给元素的定位增加了困难.如果因为在加 ...
- python3+selenium入门15-执行JavaScript
有时有些功能需要通过js来执行,比如拖动浏览器的滚动条.通过execute_script()方法可以执行js的代码 window.scrollTo()可以传两个参数,第一个参数是下方滚动条的位置,第二 ...
随机推荐
- cmd命令查看当前IIS运行的网站iisapp appcmd
xp,2003中用的命令是:iisapp -a 2007,2008,2012系统中: cmd命令行进入%windir%\system32\inetsrv\目录下 运行appcmd.exe list w ...
- ruby数据库表添加字段、修改字段类型、修改字段名称
Rails 手册 3.8 使用 change 方法 1.为表添加字段 rails g migration add_column_to_d_groups_equip_num class AddColum ...
- js取指定范围随机值【原】
js取指定范围随机值 <HTML> <HEAD> <meta http-equiv="content-Type"content="text/ ...
- mysql修改表结构语句
mysql alter 用法,修改表,字段等信息 一: 修改表信息 1.修改表名 alter table test_a rename to sys_app; 2.修改表注释 alter table ...
- 解析ArcGis的字段计算器(三)——文本型字段计算,编号那些事儿
实际操作中我们一般会将编号字段定义为文本型,因为编号不是序号,序号是一个递增数值,而编号往往是一个数字串代码. 本篇无说明的均使用VBScript语句1.怎么编号?最简单的编号—>直接在编号字段 ...
- 063、如何使用weave网络(2019-04-03 周三)
参考https://www.cnblogs.com/CloudMan6/p/7471162.html weave是Weaveworks开发的容器网络解决方案.weave创建的虚拟网络可以将部署在多 ...
- Android中的分层----service 层,domain层,dao 层,action层等设计
service 层 服务层:直接为客户端提供的服务或功能.也是系统所能对外提供的功能. domain层 领域层:系统内的领域活动,存放实体. dao 层 持久层,DB操作都写在这里,数据访问对象,通过 ...
- getservbyname和getservbyport
一.getservbyname函数原型 #include <netdb.h> struct servent *getservbyname(const char *servname, con ...
- 使用WebSocket帮助应用程序群集节点间通信
[序列化message传输方式]两种方式都是转成二进制. 1.使用Java序列化器,ObjectXXXputStream 2.使用ByteBuffer.wrap(bytes). 在一个标准群集场景中, ...
- 【noip 2015】提高组
先扔一份写的超级详细的题解. -Day1- -Day2- (感觉自己并没有什么写题解的必要啊……做点补充好了,顺便扔代码 D1T1.神奇的幻方 题目链接 #include<cstdio ...