- 『心善渊』Selenium3.0基础 — 29.Selenium
- 『心善渊』Selenium3.0基础 — 41.TMLTestR
- 『心善渊』Selenium3.0基础 — 30.Selenium
- 『心善渊』Selenium3.0基础 — 31.Selenium
- 『心善渊』Selenium3.0基础 — 32.Selenium
- 『心善渊』Selenium3.0基础 — 28.Selenium
- 『心善渊』Selenium3.0基础 — 14.Selenium
- 『心善渊』Selenium3.0基础 — 17.Selenium
- 『心善渊』Selenium3.0基础 — 25.Selenium
- 『心善渊』Selenium3.0基础 — 26.Selenium
6、显式等待
(1)显式等待介绍
显示等待是一种更智能的等待方式。显示等待比隐式等待更节省测试时间,个人更推荐使用显示等待的方式来判断页面元素是否出现。程序会每隔一段时间(默认为0.5秒,可自定义)执行一下判断条件,等待某个条件成立时继续执行,否则在达到最大时长抛出超时异常TimeoutException
(实际上是until()
抛出的TimeoutException
异常,这里注意一下)。
WebDriverWait()
类是由WebDirver
提供的等待方法。在设置时间内,通过配合until()
、until_not()
、ExpectedCondition
等条件的使用,默认每隔一段时间,轮询检测一次当前页面元素是否存在,如果超过设置时间检测不到则抛出异常。这样的等待方式可避免无效等待,在实际应用中推荐使用该方法。
(2)语法
# 导包WebDriverWait
from selenium.webdriver.support.wait import WebDriverWait
# 显示等待方法
WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)
说明:
-
driver
:WebDriver的驱动程序(IE、Firefox、Chrome等)。 -
timeout
:最长超时时间,默认以秒为单位。 -
poll_frequency
:休眠时间的间隔(步长)时间,默认为0.5秒(轮询频率) -
ignored_exceptions
:超时后的异常信息,默认值ignored_exceptions=None
,因为通常配合until()
方法使用,until()
方法默认情况下抛TimeoutException
异常。
(3)until()
和until_not()
方法
WebDriverWait()
方法一般会和until()
或until_not()
方法配合使用。
@1.until(method, message=' ')
-
method
:在等待期间,每隔一段时间调用这个传入的方法,直到返回值为True; -
message
:如果超时,抛出TimeoutException
,将message位置传入异常。
@2.until_not(method, message=’ ’)
-
method
:在等待期间,每隔一段时间调用这个传入的方法,直到返回值为False。 -
message
:如果超时,抛出TimeoutException
,将message位置传入异常。
注:
until_not
是当某元素消失或什么条件不成立则继续执行。
(4)具体调用方式
WebDriverWait(driver, 超时时长, 调用频率(可选,有默认值), 忽略异常(可选,有默认值)).until(可执行方法, 超时时返回的信息)
(5)示例
"""
1.学习目标
必须掌握selenium中显式等待使用方法
2.操作步骤(语法)
2.1导入WebDriverWait类
2.2使用方法
WebDriverWait(driver,timeout,pol1_frequency=0.5).until(method)
driver:浏览器
timeout:最大等待时间,单位:秒(和隐式显示是一样的)
po11_frequency:轮询时间
until(method,message)
method:将一个方法作为参数传入
3.需求
在注册A页面中,使用显示等待来定位账号A输入相
"""
# 1.导入selenium
from selenium import webdriver
import time
from selenium.webdriver.support.wait import WebDriverWait
from selenium.common.exceptions import NoSuchElementException
# 2.打开浏览器
driver = webdriver.Chrome()
# 3.打开页面
url = "https://www.jd.com/"
driver.get(url)
# 4.使用显示等待,定位元素,点击链接
try:
print("等待开始时间", time.time())
"""
lambda x: x.find_element_by_link_text("秒杀")
是Python的匿名函数,主要记得这里要传入一个方法。
x = driver
不过以后在我们的实际开发中,不这样传入一个方法。
"""
login = WebDriverWait(driver, 5).until(lambda x: x.find_element_by_link_text("秒杀"))
print("等待结束时间", time.time())
login.click()
except NoSuchElementException as e:
print(e)
finally:
# 5.关闭浏览器
time.sleep(3)
driver.quit()
"""
输出结果:
等待开始时间 1590511979.5245922
等待结束时间 1590511979.5725648
"""
参考:
网友评论