当前位置:   article > 正文

selenium自动化测试——元素等待_界面自动化测试,等待页面被挡元素

界面自动化测试,等待页面被挡元素

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

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

二、元素等待方法

1.sleep强制等待

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

from time import sleep
  • 1
'
运行

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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

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

三、饭后总结

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/代码探险家/article/detail/910077
推荐阅读
相关标签
  

闽ICP备14008679号