自动化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(),除非确实有必要,因为这会导致不可预知的延迟,影响测试性能。
相关推荐
湘美书院--湘美谈教育15 分钟前
湘美书院主理人谈AI文学:提示词与Skill的与时俱进
大数据·人工智能·安全·自动化·生活
神奇霸王龙1 小时前
Agent 准入门控屠夫:5 旗舰 4 维度评估
linux·运维·数据库·ai·ai作画·agent·ai编程
cfm_29141 小时前
基于Binlog实现不停机数据库平滑迁移技术
运维·数据库·架构
DeepVisionary1 小时前
从GPT-5.6 Sol的Ultrafast模式看推理速度竞赛:750 token/秒背后,Cerebras的晶圆级生意
python·自动化
迪康Defender1 小时前
AI 重构终端安全运营:智能分析中枢 AI Insight 模块架构与落地场景深度解析
运维·网络·人工智能·其他·安全·重构·架构
微硬创新2 小时前
老旧产线改造:耐达讯自动化16路4‑20mA转PROFINET的工程实践
人工智能·网络协议·自动化·信息与通信
HiDev_3 小时前
【非标自动化】2、认识元器件(固态继电器)
运维·自动化
明达智控技术3 小时前
国产 PLC 落地立库自动化,MC5000边缘智能控制器破局
运维·自动化
小绫网络安全3 小时前
Kali Linux渗透测试入门教程:从零搭建到实战攻防
linux·运维·服务器
西安景驰电子4 小时前
《PTP精确时间协议系列》第一篇:从原理到应用,全面解读IEEE 1588
linux·运维·服务器·开发语言·网络·windows·php