Selenium篇5-WEB自动化中三种等待方式的灵活使用

只要耐心看完,三种等待方式如何使用,什么场景使用哪种等待方式一定能够明白!!

前言

1、为什么需要使用等待?

  • 在使用元素定位时,client写的代码是按顺序执行的,因网络、前端页面性能加载、硬件设备等原因导致元素加载过慢时,元素还未加载出来,那么去执行定位元素的代码,肯定是会报异常,提示元素找不到。所以我们需要在代码层加等待;
  • 有些元素能定位到,但是在一定的时间内,不能操作(点击);
  • 调试过程中,加等待可以使得过程相对显而易见;

2、需要弄清楚强制等待和智能等待的区别以及使用

1、强制等待

1.1 用法

# 导入第三方包
import time
time.sleep(5)

1.2 用处

  • 1、设置等待几秒,程序就会等待几秒;
  • 2、一般用于智能等待不能完成的操作,就需要使用智能等待;
  • 3、强制等待最简单,但是效能最低;
  • 4、可以用在文件上传、js操作、以及与其他系统进行交互的地方;

2、智能等待

智能等待分为两种,一种是隐式等待,一种是显示等待。

2.1 隐式等待

2.1.1 用法

from selenium import webdriver
driver = webdriver.Chrome()
driver.get('https://www.baidu.com')
# 设置显示等待,时间为30s
driver.implicitly_wait(time_to_wait=30)

2.1.2 用处

  • 1、隐式等待是driver的方法,用法是driver.implicitly_wait(*);
  • 2、隐式等待是webdriver的服务,在接口自动化、其他python代码中是不能使用的;
  • 3、初始化浏览器后,设置好,执行该代码后,对后续代码都会起到作用;
  • 4、在每一个元素定位后到下一个元素定位前,如果定位不到,会有一个智能的等待,至多等待到设定的值,上述为30S,如果30S还未找到需要定位的元素,那么就会报异常;
  • 5、最开始需要设置一个time_to_wait的时间,可以写成driver.implicitly_wait(30);
  • 6、只能用来等待元素被加载(找元素的时候等待);

2.2 显示等待

2.2.1 用法

1、需要访问WebDriverWait类,初始化一个计时器;
2、需要设置一个条件(等待元素可见、等待元素加载、等待元素被点击等等);

源码及分析

# 第一步
1、访问WebDriverWait类,初始化一个计时器
# 先看看WebDriverWait类的源码,都需要传入什么参数,以及参数的含义
from selenium.webdriver.support.wait import WebDriverWait
‘’‘
WebDriverWait类源码
class WebDriverWait(object):
    def __init__(self, driver, timeout, poll_frequency=POLL_FREQUENCY, ignored_exceptions=None):
’‘’
‘’‘
实例化类对象时,需要传入四个参数
driver:浏览器(也就是driver = webdriver.Chrome())
timeout:超时时间,多久未找到就会报异常
poll_frequency:轮询时间,每过多久看一下元素是否找到,默认是0.5s
ignored_exceptions: 可以忽略,使用默认值即可,是在调用期间被忽略的异常类的可迭代结构
’‘’
# 第二步
2、需要设置一个等待条件
# 需要导入一个类expected_conditions ,取别名ec (因为模块名称太长,可以取一个别名)
from selenium.webdriver.support import expected_conditions as ec
locator = ('xpath','//*[@id="kw"]')
# 等待元素可见
element = wait.until(ec.presence_of_element_located(locator))
element.send_keys('123456')
# 可以查看源码,源码里面有很多方法可以使用,如下表

在这里插入图片描述
列举出来几个常用的等待条件,其他更多的条件可以查看源码,里面class太多了。

等待条件含义
title_is标题是什么
title_contains标题包含什么
presence_of_element_located元素是否可见
url_containsurl是否包含一个字符串
url_matchesurl的精确匹配,期望值
visibility_of_element_located是否存在一个元素,元素可见
presence_of_all_elements_located至少有一个元素存在的期望
visibility_of_any_elements_located至少有一个可见元素的期望
new_window_is_opened新窗口是否被打开

综合使用显示等待

from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as ec
driver = webdriver.Chrome()
# 设置隐式等待
driver.implicitly_wait(30)
driver.get("http://www.baidu.com")
# 使用显示等待
# 1、设置一个计时器
wait = WebDriverWait(driver,timeout=30,poll_frequency=0.5)
locator = ('xpath','//*[@id="su"]') # 百度按钮的定位方式

driver.find_element_by_xpath('//*[@id="kw"]').send_keys('拉菲Maynard博客')
# 2、设置一个等待条件
# 元素可以被点击,返回一个element
element = wait.until(ec.element_to_be_clickable(locator=locator))
element.click()

大家可以模拟上面代码,使用打开新窗口或者其他的等待条件,完成显示等待

2.2.2 用处

  • 1、隐式等待不起作用的前提下,可以考虑显示等待;
  • 2、比如元素置灰,倒计时按钮,在一段时间后,按钮才可被点击,那么需要使用显示等待;
  • 3、打开新的窗口,需要使用显示等待,new_window_is_opened条件;
  • 4、显示等待针对单个元素起作用,隐式等待设置后,后面的所有代码都会起作用;

有什么问题,欢迎大家评论区评论交流!谢谢大家!
后续博客会继续分享相关知识!!
如果觉得博主这篇博客对大家有用,麻烦评论区留下自己的‘脚印’ !

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值