显式等待:

显式等待是你在代码中定义等待一定条件发生后再进一步执行你的代码。简单的说就是在指定时间内,一直等待某个条件成立,条件成立后立即执行定位元素的操作;如果超过这个时间条件仍然没有成立,则会抛出异常!显式等待需要使用 selenium.webdriver.support.excepted_conditions 期望条件和 selenium.webdriver.support.ui.WebDriverWait 类来配合完成。

隐式等待:

隐式等待实际是设置了一个最长等待时间,如果在规定时间内网页加载完成,则执行下一步,否则一直等到时间结束,然后执行下一步。如果某些元素不是立即可用的,隐式等待是告诉 WebDriver 去等待一定的时间后去查找元素。默认等待时间是0秒,一旦设置该值,隐式等待是设置该 WebDriver 的实例的生命周期。这样的隐式等待会有个坑,有些页面的JS是放在body的最后进行加载,实际这是页面上的元素都已经加载完毕,我们却还在等待全部页面加载结束。

需要特别说明的是:隐性等待对整个 driver 的周期都起作用,所以只要设置一次即可(在最开始设置一次就可以了),切不要当作固定等待使用。 熟悉了什么是显式等待和隐式等待,下面就让我们来看看怎么使用这两种等待吧。

1、显式等待

显式等待是你在代码中定义等待一定条件发生后再进一步执行你的代码。

 1 from selenium import webdriver
2 from selenium.webdriver.common.by import By
3 from selenium.webdriver.support.ui import WebDriverWait
4 from selenium.webdriver.support import expected_conditions
5
6 driver = webdriver.Chrome()
7 driver.get("url")
8
9 locator = (By.ID, "你的标签ID")
10
11 # 显式等待:条件成立,立即执行;超过指定时间则报错
12 WebDriverWait(driver, 10).until(expected_conditions.presence_of_element_located(locator))
13 driver.find_element_by_id("你的标签ID").click()
14 # 或
15 element = WebDriverWait(driver, 10).until(expected_conditions.presence_of_element_located((By.ID, "你的标签ID")))
16 element.click()

注意:传入的定位条件必须是元组形式。

代码说明:

WebDriverWait(driver, 10):设置了一个10秒上限的等待时间。在指定时间内,一直等待某个条件成立,条件成立后立即执行定位元素的操作;如果超过这个时间条件仍然没有成立,则会抛出 TimeoutException 异常!

expected_conditions:后面是自动化的Web浏览器中一些常用的预期条件。请参考    https://blog.csdn.net/kelanmomo/article/details/82886718

WebDriverWait参数:

  • driver:传入WebDriver实例,即我们上例中的driver
  • timeout:超时时间,等待的最长时间
  • poll_frequency:调用until或until_not中的方法的间隔时间,默认是0.5秒
  • ignored_exceptions:忽略的异常,如果在调用until或until_not的过程中抛出这个元组中的异常,则不中断代码,继续等待,如果抛出的是这个元组外的异常,则中断代码,抛出异常。默认只有NoSuchElementException。

  这个模块中,一共只有两种方法 until 与 until_not:

  • until:当某元素出现或什么条件成立则继续执行
  • until_not:当某元素消失或什么条件不成立则继续执行

  until 与 until_not 参数如下:

  • method:在等待期间,每隔一段时间调用这个传入的方法,直到返回值不是False
  • message:如果超时,抛出TimeoutException,将message传入异常

2、隐式等待

如果某些元素不是立即可用的,隐式等待是告诉WebDriver去等待一定的时间后去查找元素。默认等待时间是0秒,一旦设置该值,隐式等待是设置该WebDriver的实例的生命周期。

1 from selenium import webdriver
2
3 driver = webdriver.Chrome()
4 # 隐式等待:最长等待10秒钟往下执行
5 driver.implicitly_wait(10)
6 driver.get("url")
7 # 执行定位元素操作
8 element = driver.find_element_by_id("标签ID")

注意:隐式等待和显示等待都存在时,超时时间取二者中较大的。

原文链接:https://blog.csdn.net/xhaimail/article/details/104891037

Selenium显式、隐式等待的更多相关文章

  1. python+selenium六:隐式等待

    python+selenium六:隐式等待   # 隐式等待 # 全局生效,只写一次即可(仅当前页面)# 若有页面切换,需sleep等待新页面出现后,再使用此方法 # 如:在35秒内,等待操作完成,完 ...

  2. [selenium webdriver Java]隐式的等待同步

    Selenium WebDriver提供了隐式等待来同步测试.当使用了隐式等待执行测试的时候,如果WebDriver没有在DOM中找到元素,将继续等待,超出设定时间后,抛出找不到元素异常 即,当元素没 ...

  3. Android开发:显式/隐式Intent

    显式跳转 是在已知包名和类名的情况下常用的跳转方法: Intent mIntent = new Intent(); mIntent.setClassName("com.android.set ...

  4. C++显式隐式构造函数

    https://blog.csdn.net/starlee/article/details/1331268#comments

  5. (转载)Android理解:显式和隐式Intent

    Intent分两种:显式(Explicit intent)和隐式(Implicit intent). 一.显式(设置Component) 显式,即直接指定需要打开的activity对应的类. 以下多种 ...

  6. 【转】Android理解:显式和隐式Intent---- try catch

    原文网址:http://blog.csdn.net/xiao__gui/article/details/11392987 Intent是Android初学者比较难理解的一个东西.我这里以通俗易懂的语言 ...

  7. js 五种绑定彻底弄懂this,默认绑定、隐式绑定、显式绑定、new绑定、箭头函数绑定详解

     壹 ❀ 引 可以说this与闭包.原型链一样,属于JavaScript开发中老生常谈的问题了,百度一搜,this相关的文章铺天盖地.可开发好几年,被几道this题安排明明白白的人应该不在少数(我就是 ...

  8. JS五种绑定彻底弄懂this,默认绑定、隐式绑定、显式绑定、new绑定、箭头函数绑定详解(转载)

    目录 壹 ❀ 引 贰 ❀ this默认绑定 叁 ❀ this隐式绑定 1.隐式绑定 2.隐式丢失 肆 ❀ this显式绑定 伍 ❀ new绑定 陆 ❀ this绑定优先级 柒 ❀ 箭头函数的this ...

  9. selenium 找不到元素 (显式等待 和隐式等待的区别)

    selenium自动化页面元素不存在异常发生的原因有一下几点: (1)页面加载时间过慢,需要查找的元素程序已经完成但是页面还未加载成功.此时可以加载页面等待时间. (2)查到的元素没有在当前的ifra ...

  10. (java)selenium webdriver学习---三种等待时间方法:显式等待,隐式等待,强制等待

    selenium webdriver学习---三种等待时间方法:显式等待,隐式等待,强制等待 本例包括窗口最大化,刷新,切换到指定窗口,后退,前进,获取当前窗口url等操作: import java. ...

随机推荐

  1. linux 下安装部署redis

    安装: 1.获取redis资源   wget http://download.redis.io/releases/redis-4.0.8.tar.gz 2.解压   tar xzvf redis-4. ...

  2. wamp+phpstrom+Xdebuge helper(google)

    一.软件安装两个软件的安装和第三个浏览器插件就不再赘述,网上有很多详细的教程,自行百度. 二.配置步骤1.wampwamp的优势在于自带xdebuge的dll文件,所以不需要在官网根据版本下载,具体位 ...

  3. AES可以加密成

    AES可以生成HEX的字符串如{[m9LJfF4fYtt+PGoAA5WmL+6RFh5oVvrlCQpVhLyk3l28XqS3D4Qd+ehOdvqLcUrFKcyBV3hygXHU3We33bY ...

  4. 【快速学】指针是什么?指针常量、常量指针是什么?(C++)

    0.先上总结 指针是什么?指针是个数据类型.你可以定义一个指针变量,它里面存储的是个地址 如int a=3;,定义了一个int类型的变量a,值为3,它在内存中的地址为&a 同理,int *b= ...

  5. python连接Oracel、postgreSQL、SQLserver、Mysql、mongodb、redis等常用数据库方法汇总

    python对接常用数据库 python有着极其丰富的第三方的库,如此强大的python语言操作各大数据库,不管你使用的关系型数据库是oracle,mysql, sqlserver,还是关系型数据库r ...

  6. drf从入门到飞升仙界 01

    web应用模式 # 1.django web框架,专门用来写web项目 # 2.前后端混合开发 - 作为后端人员也需要写模板语法 - 作为前后端都混合时期的全栈工程师,则需要都写,内容比较多 # 3. ...

  7. Linux安装两个anaconda

    安装过程 1.安装第一个Anaconda Anaconda的官方安装网址在 https://www.continuum.io/downloads/ 安装命令: bash Anaconda3-4.3.1 ...

  8. virtualenv管理py环境linux版

    因为服务器上已经安装了python3,所以直接安装virtualenv即可 pip3 install virtualenv -i https://mirrors.aliyun.com/pypi/sim ...

  9. 每日一抄 Go语言等待组

    package main import ( "fmt" "net/http" "sync" ) /* Go语言除了可以使用通道(channe ...

  10. Cloudflare.com设置域名URL转发

    1.登录Cloudflare.com,将语言设置为简体中文,并选择需要设置URL转发的域名. 2.选择域名,需先对域名进行解析,解析地址随便填写,可以填写CloudFlare官方提供的DNS服务器地址 ...