——为什么要设置元素等待:

  目前大多数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学习之元素等待(四)的更多相关文章

  1. Selenium 3----设置元素等待

    在做Web应用的自动化测试时,定位元素必不可少,这个过程经常出现定位不到元素的情况,常见原因有哪些呢? 1.描述错误 提高编写水平.细心 2.Frame/Iframe框架原因 在元素所在框架里定位该元 ...

  2. selenium webdriver——设置元素等待

    如今大多数Web应用程序使用ajax技术,当浏览器在加载页面时,页面上的元素可能并不是同时被加载完成,这给定位元素的定位增加了困难, 如果因为在加载某个元素时延迟而造成ElementNotVisibl ...

  3. selenium - webdriver - 设置元素等待

    隐式等待:implicitly_wait(value), value默认是0 from selenium import webdriverfrom selenium.common.exceptions ...

  4. selenium - 三种元素等待

    1.sleep 休眠方法 sleep()由python的time模块提供. 当执行到sleep()方法时,脚本会定时休眠所设置的时长,sleep()方法默认参数是s(秒),sleep(2) 表示休眠2 ...

  5. Python +selenium之设置元素等待

    注:本文转载http://www.cnblogs.com/mengyu/p/6972968.html 当浏览器在加载页面时,页面上的元素可能并不是同时被加载完成,这给元素的定位增加了困难.如果因为在加 ...

  6. UI自动化学习笔记- Selenium元素等待(强制等待、显示等待、隐式等待)

    一.元素等待 1. 元素等待 1.1 什么是元素等待 概念:在定位页面元素时如果未找到,会在指定时间内一直等待的过程 意思就是:等待指定元素已被加载出来之后,我们才去定位该元素,就不会出现定位失败的现 ...

  7. Python+Selenium笔记(十):元素等待机制

     (一) 前言 突然的资源受限或网络延迟,可能导致找不到目标元素,这时测试报告会显示测试失败.这时需要一种延时机制,来使脚本的运行速度与程序的响应速度相匹配,WebDriver为这种情况提供了隐式等待 ...

  8. Appium+python自动化(二十四)- 白素贞千年等一回许仙 - 元素等待(超详解)

    简介 许仙小时候最喜欢吃又甜又软的汤圆了,一次一颗汤圆落入西湖,被一条小白蛇衔走了.十几年后,一位身着白衣.有青衣丫鬟相伴的美丽女子与许仙相识了,她叫白娘子.白娘子聪明又善良,两个人很快走到了一起.靠 ...

  9. 『心善渊』Selenium3.0基础 — 23、Selenium元素等待

    目录 1.什么是元素等待 2.为什么要设置元素等待 3.Selenium中常用的等待方式 4.强制等待 5.隐式等待 (1)隐式等待介绍 (2)示例 6.显式等待 (1)显式等待介绍 (2)语法 (3 ...

随机推荐

  1. Python技术调查

    1. IDE 2. Local Debugging & Remote Debugging 3. Profiling

  2. File类与IO流

    一.File类与IO流 数组.集合等内容都是把数据放在内存里面,一旦关机或者断电,数据就会立刻从内存里面消失.而IO主要讲文件的传输(输入和输出),把内存里面的数据持久化到硬盘上,如.txt .avi ...

  3. 被Spring坑了一把,查看源码终于解决了DataFlow部署K8s应用的问题

    1 前言 欢迎访问南瓜慢说 www.pkslow.com获取更多精彩文章! Docker & Kubernetes相关文章:容器技术 基于各种原因,团队的Kubernetes被加了限制,必须在 ...

  4. 简介&目录

    欢迎来到 MK 的博客鸭~ 这里会被我用来发一些OI算法.数据结构的学习笔记,各种游记和其他的一些内容,希望大家多多关照! ε≡٩(๑>₃<)۶ 然后目录就也放这里⑧:

  5. 对Jenkinsfile语法说不,开源项目Jenkins Json Build挺你

    对Jenkinsfile语法说不,开源项目Jenkins Json Build挺你 项目背景 我所在的组织项目数量众多,使用的语言和框架也很多,比如Java.ReactNative.C# .NET.A ...

  6. sqlserver语句的执行顺序

    执行顺序: 1.from 2.where 3.group by 4.having 5.根据select 关键之后的要显示的字段,进行结果集显示 6.order by 对最终结果集进行排序 7.top/ ...

  7. Linux:crond(crontab)定时任务

    一..定义 Crond 是linux系统中用来定期执行命令或指定程序任务的一种服务或者软件.一般在安装完系统时,crond会默认存在. crond默认每分钟会检查系统中是否有需要执行的定时任务.如果有 ...

  8. JS -- 操作符和数组

    一.Javascript常用操作符 <!DOCTYPE html> <html> <head> <meta charset="UTF-8" ...

  9. git仓库个人和企业版新增仓库和成员

    1.首先要在本地安装一个git安装包,比如安装完之后路径是在      D:\Program Files (x86)\Git\bin\git.exe 2.访问git网址  https://gitee. ...

  10. PHP实现Restful风格的API(转)

    Restful是一种设计风格而不是标准,比如一个接口原本是这样的: http://www1.qixoo.com/user/view/id/1表示获取id为1的用户信息,如果使用Restful风格,可以 ...