Selenium 三种等待方式(强制等待、隐式等待、显示等待)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Selenium 三种等待方式(强制等待、隐式等待、显示等待)相关的知识,希望对你有一定的参考价值。
参考技术A 缺点: 由于Web加载的速度取决于测试的硬件、网速、服务器的响应时间等因素。如果等待时间太长,容易造成时间浪费,如果等待时间太短又可能会造成在web还没有加载完所需要定位的element,而出现报错。
由于等待时间无法确定,使用太多的sleep会影响运行速度,大大地降低效率,所以建议测试中尽量少使用强制等待。
简介: 隐式等待是全局的是针对所有元素,设置等待时间如10秒,如果10秒内出现,则继续向下,否则抛异常。可以理解为在10秒以内,不停刷新看元素是否加载出来。
使用场景: 隐式等待只需要声明一次,一般在打开浏览器后进行声明。声明之后对整个drvier的生命周期都有效,后面不用重复声明。隐式等待存在一个问题,那就是程序会一直等待整个页面加载完成,也就是一般情况下你看到浏览器标签栏那个小圈不再转,才会执行下一步,但有时候页面想要的元素早就在加载完成了,但是因为个别js之类的东西特别慢,仍得等到页面全部完成才能执行下一步。
简介: 显示等待是单独针对某个元素,设置一个等待时间如5秒,每隔0.5秒检查一次是否出现,如果在5秒之前任何时候出现,则继续向下,一般需要配合该类的 until() 和 until_not() 方法一起用,直到超过设置的最长时间,然后抛出超时错误 TimeoutException ,以下介绍几个最常用的方法:
1. 判断element是否可见:visibility_of_element_located(locator) (可见代表element非隐藏,并且element宽和高都不等于 0)
2. 判断某个element是否被加载到dom树:presence_of_element_located(locator) (并不代表该element一定可见)
3. 判断某个element中是否可见并且可点击:element_to_be_clickable(locator)
4. 判断某个element是否被选中:element_to_be_selected(element) (一般用在下拉列表)
selenium的三种等待方式
一、强制等待:
time.sleep(3)---->强制等待3秒
二、隐式等待:
driver.implicitly_wait(20)
含义:设置的这个20秒表示最大等待时长,它等待到什么情况结束呢?--->它就相当于我们在浏览器中,加载一个页面,看到页面不在转圈圈,全部加载完成之后,才算等待结束。
全部加载完成在浏览器其实包含以下内容:
1.页面的html从服务器返回。
2.页面的所有静态资源,js,css,img,广告,全部从服务器获取,在加载到页面中。
隐式等待的弊端:
一般我们在写程序的时候,这里使用等待,最主要的目的就是等待我们想要的数据能够出来就可以了。用隐式等待他是等到所有资源都加载的完成的,我们花了一部分时间,去等待我们不想要的资源,所以隐式等待并不常用。
三、显式等待:会设置一个条件,当页面满足该条件时,等待完成!
调用模块
from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdrver.common.by import By
创建一个等待对象
wait=WebDriverWait(driver"""等待作用的那个driver""",20"""最大等待时长,超过时长会报timeout异常""") wait.until( EC.presence_of_element_located( By.XPATH"""定位器的选择器名称。By.ID,By.CSS_SELECTOR""",‘//div[@class="recreit-list"]‘ """定位器""",locator))
presence_of_element_located:等待条件。
以上是关于Selenium 三种等待方式(强制等待、隐式等待、显示等待)的主要内容,如果未能解决你的问题,请参考以下文章