selenium自动化测试——元素等待

一、为什么要设置元素等待

使用webdriver定位元素时,当页面还处于加载中的状态,可能会识别不到该元素。这个时候就需要加上一定的等待时间。主要由以下三种原因造成:
1.代码运行速度比网络速度快
2.电脑配置
3.服务器处理请求需要时间

二、元素等待方法

1.sleep强制等待

该方法不仅可以在selenium中使用,还可以在python脚本中使用,可以强制代码停止执行。在使用的时候只需要引入

from time import sleep

2.隐式等待

作用范围:针对页面上所有元素
适用场景:当产品大大提出某个页面需要在x秒内加载完成的需求,即验证页面上所有元素加载完成的时间时,可以使用隐式等待。
核心讲解:通过implicitly_wait()方式实现隐式等待,默认单位为秒。通过一定的时长等待页面所有元素加载完成,如果超出了设置的时长,元素还没有被加载则抛NoSuchElementException异常 。
示例代码

# 1.导入selenium
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
import time
# 2.打开浏览器——谷歌浏览器
driver = webdriver.Chrome('./chromedriver')
# 3.输入网址
driver.get("https://www.taobao.com")
# 4.使用隐式等待,点击【亲,请登录】链接
print("开始时间",time.time()) # 获取时间戳
driver.implicitly_wait(10) # 隐式等待最大等待时间10s
try:
    driver.find_element_by_link_text("亲,请登录").click()
except NoSuchElementException as msg:
    print(msg)
print("结束时间",time.time()) # 获取时间戳
# 5.关闭浏览器
driver.quit()

3.显式等待

作用范围:针对页面某一个元素
简单介绍:在设定时间内,针对某个元素每隔一段时间去检测其是否存在,如果超过设定时间检测不到则抛出异常。
调用方法:WebDriverWait(driver, timeout, poll_frequency, ignored_exceptions).until(method, message) 或者WebDriverWait(driver, timeout, poll_frequency, ignored_exceptions).until_not(method, message)
参数详解
(1)WebDriverWait

参数详解
driverWebDriver的驱动程序(IE、Firefox、Chrome等)
timeout最长超时时间,默认以秒为单位
poll_frequency休眠时间的间隔(步长)时间,默认为0.5秒
ignored_exceptions超时后的异常信息,默认情况下抛NoSuchElement异常

(2)until

参数详解
method在等待期间,每隔一段时间调用这个传入的方法,直至返回True
message如果超时,抛出TimeoutException,将message传入异常

(3)until_not

参数详解
method与until相反,until是当某元素出现或什么条件成立则继续执行
messageuntil_not是当某元素消失或什么条件不成立则继续执行,参数也相同,不再赘述

示例代码

# 1.导入selenium
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
import time
# 2.打开浏览器——谷歌浏览器
driver = webdriver.Chrome('./chromedriver')
# 3.输入网址
driver.get("https://www.taobao.com")
# 4.显示等待
print("开始时间",time.time())
search = WebDriverWait(driver,3).until(lambda x:driver.find_element_by_id("q"))
print("结束时间",time.time())
search.send_keys("衣服")
# 5.关闭浏览器
driver.quit()

注意一下:until里面的参数是method,如果写成search = WebDriverWait(driver,3).until(driver.find_element_by_id(“q”),则控制台会报错:
在这里插入图片描述
此时说明WebElement这个对象不能被调用,那正确的写法是什么呢?对于python语法不是很熟悉的同学,可以进入WebDriverWait的方法。这里的Example就给了一个很好的示例:
在这里插入图片描述
实际上在python 中,lambda函数是用一个语句表达的匿名函数,它可以用它来代替小的函数,相当于是将元素定位封装成了一个方法,这样一来就我们就可以愉快地使用啦。
在这里插入图片描述
当元素定位的表达式写错时,控制台会提示超时错误。说明经过一定的等待时间,元素还是没有被找到。

三、饭后总结

今天我们主要学习了元素等待的三种方式:sleep强制等待、隐式等待、显式等待,小伙伴们都学会了吗?小王想说:美味需要耐心等待,人生也是如此。只要不停下脚步,终会遇见那个对的人更加优秀的自己。
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值