自动化APP测试APPium的元素等待

在使用Appium进行移动应用自动化测试时,有三种等待。

隐式等待driver.implicitly_wait()

显式等待(常用)

time.sleep()

隐式等待(Implicit Wait)

应用场景

  • 当你希望对所有元素定位操作设置统一的超时时间,以应对网络波动或服务器响应速度不一致的情况。

概念

  • 设置一个全局的等待时间,如果在指定时间内未找到元素,则抛出NoSuchElementException异常。
  • 适用于整个会话期间,对于每个元素查找都会生效。

步骤

复制代码
driver.implicitly_wait(10)  # 设置隐式等待时间为10秒

作用

  • 减少了代码中重复的等待逻辑,简化了脚本编写。
  • 对于不稳定网络环境下的元素查找尤其有用。

显式等待(Explicit Wait)

应用场景

  • 当你需要针对特定元素或条件进行等待时,例如等待某个特定元素变得可点击或可见。

概念

  • 使用WebDriverWait结合expected_conditions模块,可以灵活地定义等待条件。
  • 允许更精细地控制何时继续执行下一步操作。

常用expected_conditions方法

  • title_is(title):等待页面标题等于给定值。
  • presence_of_element_located(locator):等待元素出现在DOM中。
  • element_to_be_clickable(locator):等待元素出现在DOM中且可点击。
  • 更多请参考Selenium文档中的Expected Conditions

示例代码

复制代码
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

wait = WebDriverWait(driver, 25, 5)  # 最多等待25秒,每5秒检查一次
element = wait.until(EC.element_to_be_clickable((By.XPATH, "//android.widget.TextView[@text='Login']")))
element.click()

time.sleep()

概念

  • 是一个阻塞调用,会让当前线程暂停执行指定的秒数。
  • 不推荐频繁使用,因为它会导致不必要的延迟,降低测试效率。

智能等待机制 - 轮询检查

为了提高测试效率并减少不必要的等待时间,可以采用轮询检查的方法代替固定的time.sleep()。这种方法通过每次短暂等待后检查目标状态是否满足,直到达到最大等待时间或条件被满足为止。

示例代码

复制代码
def wait_for_element(driver, by, value, timeout=30):
    end_time = time.time() + timeout
    while time.time() < end_time:
        try:
            element = driver.find_element(by, value)
            if element.is_displayed():
                return element
        except Exception:
            pass
        time.sleep(1)  # 每隔1秒检查一次
    raise TimeoutError("等待元素超时")

总结

  • 隐式等待提供了一种简单的方式为所有元素查找设置统一的超时时间,适合应用于需要一致等待策略的场景。
  • 显式等待则允许更加精准地控制何时继续执行,基于特定条件进行等待,非常适合复杂或动态变化的应用界面。
  • 避免直接使用time.sleep(),除非确实有必要,因为这会导致不可预知的延迟,影响测试性能。
相关推荐
鱼听禅20 小时前
CentOS Stream 10系统配置戴尔R730风扇速度
linux·运维·centos
IMPYLH20 小时前
Linux 的 unlink 命令
linux·运维·服务器·bash
风风筝吖20 小时前
ACL + NAT 综合配置HCL
运维·网络
工业机器人销售服务20 小时前
铸件去毛刺,伯朗特机器人带气动打磨头,恒力去除浇口残余
运维·服务器·人工智能
网安小学生(兼顾数据库版)20 小时前
主流SBOM生成工具横评:自动化、准确性与合规支持
网络·安全·自动化
光电笑映20 小时前
Linux 文件 IO:从概念到系统调用
linux·运维·服务器
奶油话梅糖20 小时前
Codex CLI 安装适配国产信创环境实践:统信 UOS、麒麟、openEuler、Anolis 的落地思路
运维·网络
Agent手记20 小时前
委外加工成本智能核算与利润分析方案:基于LLM+超自动化的端到端实践
运维·人工智能·ai·自动化
独隅20 小时前
DHCP中继代理深度解析:核心特性、工作原理与全链路标准化实战
运维·服务器·网络
蜀道山老天师20 小时前
实操|Prometheus Pushgateway 部署、推送与数据管理全流程
运维·服务器·云原生·prometheus