美文网首页
『心善渊』Selenium3.0基础 — 29.Selenium

『心善渊』Selenium3.0基础 — 29.Selenium

作者: 繁华似锦Fighting | 来源:发表于2020-09-08 08:48 被阅读0次

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
"""

参考:

https://www.testclass.cn/selenium_elements_wait.html

相关文章

网友评论

      本文标题:『心善渊』Selenium3.0基础 — 29.Selenium

      本文链接:https://www.haomeiwen.com/subject/mpelektx.html