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

学习目标

  1. 能够使用隐式等待来定位元素
  2. 能够使用显式等待来定位元素

一、元素等待

应用场景
可能由于一些原因,我们想找的元素并没有立刻出来,此时如果直接定位可能会报错,比如以下原因:

  1. 由于网络速度原因
  2. 服务器处理请求原因
  3. 电脑配置原因

概念
WebDriver定位页面元素时如果未找到,会在指定时间内一直等待的过程
元素等待一共分为两种类型

  1. 显式等待
  2. 隐式等待

1.1 隐式等待

应用场景
针对所有定位元素的超时时间设置为同一个值的时候

概念
等待元素加载指定的时长,超出时长抛出NoSuchElementException异常

步骤

  1. 在获取 driver 对象后,使用 driver 调用 implicitly_wait 方法即可

示例
在 5 秒钟内,在《设置》程序中的 ”返回“ 按钮,如果找到则点击。如果找不到则观察对应错误信息。

核心代码

from selenium.webdriver.support.wait import WebDriverWait
# -----
# 启动应用参数
# -----
driver.implicitly_wait(5)
search_button = driver.find_element_by_xpath("//*[contains(@content-desc,'收
起')]")
search_button.click()

方法参数解释

# 参数:
# timeout:超时的时长,单位:秒
implicitly_wait(timeout)

1.2 显式等待

应用场景
针对所有定位元素的超时时间设置为不同的值的时候

概念
等待元素加载指定的时长,超出时长抛出TimeoutException异常

步骤

  1. 导包
  2. 创建 WebDriverWait 对象
  3. 调用 WebDriverWait 对象的 until 方法

示例
在 5 秒钟内,每 1 秒在《设置》程序中的 ”返回“ 按钮,如果找到则点击。如果找不到则观察对应错误信息。

核心代码

from selenium.webdriver.support.wait import WebDriverWait
# -----
# 启动应用参数
# -----
# 创建WebDriverWait对象
wait = WebDriverWait(driver, 5, poll_frequency=1)
# 获取元素并设置超时时间和频率
search_button = wait.until(lambda x: x.find_element_by_xpath("//*
[contains(@content-desc,'收起')]"))
# 点击搜索按钮
search_button.click()

方法参数解释

# 参数:
# driver:驱动对象
# timeout:超时的时长,单位:秒
# poll_frequency:检测间隔时间,默认为0.5
# 返回值:
# WebDriverWait对象
WebDriverWait(driver, timeout, poll_frequency=0.5)
# 参数:
# method:lambda查找元素表达式
# 返回值:
# 定位到的元素,如果没有定位到会抛出TimeoutException异常
wait.until(method)

二. 隐式等待和显式等待的选择

作用域:

  • 显式等待为单个元素有效,隐式为全局元素

方法:

  • 显式等待方法封装在 WebDriverWait 类中,而隐式等待则直接通过 driver 实例化对象调用

关于 sleep 的形式?

  • sleep 是固定死一个时间,不是不行,是不推荐。
  • 元素等待可以让元素出来的第一时间进行操作。sleep 可能造成不必要的浪费。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值