selenium学习之元素等待(四)
——为什么要设置元素等待:
目前大多数web应用程序都是使用AJAX和JavaScript开发,每次加载一个网页,包括静态网页和动态网页,也就是加载各种HTML标签和JS文件。在网页中进行元素定位时,有可能打开了网页但是元素未加载出来,这时进行元素定位可能会出现错误。所以,设置元素等待(等待元素加载完成再去定位)是非常有必要的。
(1)隐式等待(相当于全局变量)
隐式等待会告诉webdriver等待一段时间后查找元素。默认等待时间为0,一旦设置了隐式等待,它会对整个webdriver周期起作用。如果在规定时间内,整个网页都加载完成,就执行下一步,否则抛出异常。
缺点:无论需要定位的元素是否被加载完成,都会等待整个网页完全加载出来。
1 from selenium import webdriver
2
3 driver = webdriver.Chrome() # 创建有界面的浏览器对象
4 driver.implicitly_wait(10) # 设置隐式等待时间为10秒
5 driver.get("https://www.baidu.com/") # 请求页面
6 input = driver.find_element_by_id("kw") # 根据id值定位输入框
(2)显示等待(推荐 相当于局部变量)
显示等待只对指定元素有效,不再是对整个webdriver周期起作用。根据需要定位的元素来设置显示等待,无需等待整个网页加载完成,节省加载时间。(只需要等待定位元素加载完成)
设置显示等待的方法:
WebDriverWait(driver, 超时时间,调用频率,可忽略的异常).until(要采用的方法,超时情况下返回信息)
调用WebDriverWait方法时,大多情况下只需要设置前两个参数:第一个参数时申明的浏览器对象;第二个参数时设置的最大显示等待时间。调用频率默认0.5s,可忽略的异常默认NoSuchElementException。
excepted_conditions是selenium中的一个模块,包含一系列用于判断的条件类,一共26个类。其中presence_of_element_located((tuple))
传入参数是一个tuple,用于定位元素。
1 from selenium import webdriver
2 from selenium.webdriver.common.by import By # 用于定位元素
3 from selenium.webdriver.support.wait import WebDriverWait # 用于设置显示等待
4 from selenium.webdriver.support import expected_conditions as EC # 用于判断定位元素是否被加载完成
5
6 driver = webdriver.Chrome() # 创建有界面的浏览器对象
7 driver.get("https://www.zhihu.com/explore") # 请求页面
8 # 设置元素等待实例,最多等待10s,每隔0.5s查看条件是否成立
9 wait = WebDriverWait(driver, 10)
10 input = wait.until(EC.presence_of_element_located((By.ID, 'q')))
11 button = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '.btn-search')))
12 print(input, button)
——如果不设置元素等待,可以使用强制等待(调用time模块的sleep方法):
缺点:无论网页、元素是否被加载完成,都会等待指定时间。
1 from selenium import webdriver
2 import time
3
4 driver = webdriver.Chrome() # 创建有界面的浏览器对象
5 driver.get("https://www.baidu.com/") # 请求页面
6 input = driver.find_element_by_id("kw") # 根据id值定位输入框
7 input.send_keys("动物") # 输入搜索关键字
8 time.sleep(3) # 强制等待3秒
9 input.clear() # 删除输入内容
10 input.send_keys("孔雀") # 重新输入搜索关键字
11 button = driver.find_element_by_id("su") # 根据id值定位搜索按钮
12 button.click() # 点击
13 driver.close() # 关闭页面
总结:
(不推荐)强制等待:无论网页、定位元素是否加载完成,都必须等待设置的时长;
(不推荐)隐式等待:无论定位元素是否加载完成,都必须等待整个网页加载完成;
(推荐) 显示等待:只需要等待定位元素加载完成。
selenium学习之元素等待(四)的更多相关文章
- Selenium 3----设置元素等待
在做Web应用的自动化测试时,定位元素必不可少,这个过程经常出现定位不到元素的情况,常见原因有哪些呢? 1.描述错误 提高编写水平.细心 2.Frame/Iframe框架原因 在元素所在框架里定位该元 ...
- selenium webdriver——设置元素等待
如今大多数Web应用程序使用ajax技术,当浏览器在加载页面时,页面上的元素可能并不是同时被加载完成,这给定位元素的定位增加了困难, 如果因为在加载某个元素时延迟而造成ElementNotVisibl ...
- 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 当浏览器在加载页面时,页面上的元素可能并不是同时被加载完成,这给元素的定位增加了困难.如果因为在加 ...
- UI自动化学习笔记- Selenium元素等待(强制等待、显示等待、隐式等待)
一.元素等待 1. 元素等待 1.1 什么是元素等待 概念:在定位页面元素时如果未找到,会在指定时间内一直等待的过程 意思就是:等待指定元素已被加载出来之后,我们才去定位该元素,就不会出现定位失败的现 ...
- Python+Selenium笔记(十):元素等待机制
(一) 前言 突然的资源受限或网络延迟,可能导致找不到目标元素,这时测试报告会显示测试失败.这时需要一种延时机制,来使脚本的运行速度与程序的响应速度相匹配,WebDriver为这种情况提供了隐式等待 ...
- Appium+python自动化(二十四)- 白素贞千年等一回许仙 - 元素等待(超详解)
简介 许仙小时候最喜欢吃又甜又软的汤圆了,一次一颗汤圆落入西湖,被一条小白蛇衔走了.十几年后,一位身着白衣.有青衣丫鬟相伴的美丽女子与许仙相识了,她叫白娘子.白娘子聪明又善良,两个人很快走到了一起.靠 ...
- 『心善渊』Selenium3.0基础 — 23、Selenium元素等待
目录 1.什么是元素等待 2.为什么要设置元素等待 3.Selenium中常用的等待方式 4.强制等待 5.隐式等待 (1)隐式等待介绍 (2)示例 6.显式等待 (1)显式等待介绍 (2)语法 (3 ...
随机推荐
- .NET Core3.1 Dotnetty实战第二章
一.概要 在上一篇文章讲到Dotnetty的基本认识,本文这次会讲解dotnetty非常核心的模块是属于比较硬核的干货了,然后继续往下讲解如何根据自己的需求或者自己的喜好去配置Dotnetty而不是生 ...
- 【Azure DevOps系列】Azure DevOps生成代码覆盖率
前言 在做单元测试时,代码覆盖率可以作为我们衡量代码质量的一个指标,本章我们将使用Azure DevOps帮助我们生成代码覆盖率的结果.Azure DevOps构建管道还是具有代码覆盖率选项的,在Vi ...
- csp201909-2小明种苹果续
/* 定义输入N 二维数组 输出T总数 D掉落棵树 E掉落组数 定义last记录上次掉落的编号,flag=1表示两次连续掉落,不掉落归零 spec=1表示1 2都掉落了,spec=2表示只有1掉落 对 ...
- C++ Templates (2.2 使用Stack类模板 Use of Class Template Stack )
返回完整目录 目录 2.2 使用Stack类模板 Use of Class Template Stack 2.2 使用Stack类模板 Use of Class Template Stack 在C++ ...
- composer安装依赖包时,php内存分配不足
Fatal error: Allowed memory size of 1610612736 bytes exhausted (tried to allocate 4096 bytes) in pha ...
- python爬取B站视频弹幕分析并制作词云
1.分析网页 视频地址: www.bilibili.com/video/BV19E… 本身博主同时也是一名up主,虽然已经断更好久了,但是不妨碍我爬取弹幕信息来分析呀. 这次我选取的是自己 唯一的爆款 ...
- 深入了解Netty【五】线程模型
引言 不同的线程模型对程序的性能有很大的影响,Netty是建立在Reactor模型的基础上,要搞清Netty的线程模型,需要了解一目前常见线程模型的一些概念. 具体是进程还是线程,是和平台或者编程语言 ...
- graph attention network(ICLR2018)官方代码详解(te4nsorflow)
论文地址:https://arxiv.org/abs/1710.10903 代码地址: https://github.com/Diego999/pyGAT 我并没有完整看过这篇论文,但是在大致了解其原 ...
- FFmpeg开发笔记(三):ffmpeg介绍、windows编译以及开发环境搭建
前言 本篇章是对之前windows环境的补充,之前windows的是无需进行编译的,此篇使用源码进行编译,版本就使用3.4.8. FFmpeg简介 FFmpeg是领先的多媒体框架,能够解码 ...
- 快速生成网络mp4视频缩略图技术
背景 由于网络原因,在下载视频之前我们往往会希望能够先生成一些视频的缩略图,大致浏览视频内容,再确定是否应花时间下载.如何能够快速得到视频多个帧的缩略图的同时尽量少的下载视频的内容,是一个值得研究的问 ...