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

  目前大多数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. vs使用fscanf和fprintf错误警告处理

    严重性代码说明项目文件行 禁止显示状态错误 C4996 fopen('fscanf'.strcmp):This function or variable may be unsafe. 最全解决办法(转 ...

  2. aop思想以及环境搭建(记录自己的一小步)1.1

    ##什么是aop思想? 首先老办法我们一起先看看官网是咋描述的? 它利用一种称为"横切"的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其名为 ...

  3. 记录laravelchina中的微信小程序教程的第四节的安装easy WeChat扩展的报错

    composer require "overtrue/laravel-wechat:~5.0 PHP Fatal error: Allowed memory size of 16106127 ...

  4. oeasy教您玩转linux010203显示logo

    我们来回顾一下 上一部分我们都讲了什么?

  5. blazemeter和jmeter

    前言 咸鱼的生活总是那么短暂,年轻还是要多学习 blazemeter BlazeMeter是一款可以记录所有HTTP流量并在10分钟内创建一个负载测试并且与Apache JMeter兼容的chrome ...

  6. myeclipse操作hdfs

    myeclipse与hadoop集成我就不说了,还是简单说两句吧! 1.hadoop搭建完毕且可以正常访问(Linux搭建的集群环境 主机是windos) 2.在主机上将hadoop包解压 3.通过m ...

  7. 通过调用标识符确定this

    一. 纲 this的性质 作用:表示函数执行时的环境 值:一个对象 特点:动态性 确定this的难度 JS语言的动态性: 函数的this在执行时才能确定 函数为一级公民 可作实参.返回值.数据赋值进行 ...

  8. Java 合并、拆分PPT幻灯片

    序 在日常使用PPT时,为了便于操作和管理文档,时常会遇到需要将PPT幻灯片进行合并或拆分的情况.本文将通过Java程序来演示如何进行上述操作. 示例要点: 1. 合并PPT幻灯片 1.1 将第一个P ...

  9. mysqli报错注入常见函数

    以下均摘自<代码审计:企业级Web代码安全架构>一书 1.floor() select * from test where id=1 and (select 1 from (select ...

  10. Tomcat 第二篇:启动流程

    1 Tomcat 基本知识 首先介绍一些 Tomcat 的基本知识,防止有纯小白看的云里雾里的. 下面这张图是一个下载好二进制版的的 Tomcat ,直接解压得到的,虽然版本是 9.x ,但是这个目录 ...