您的位置:首页 > 财经 > 金融 > 长安网站建设详细教程_甘肃兰州今天的最新消息_推广下载_网站查询地址

长安网站建设详细教程_甘肃兰州今天的最新消息_推广下载_网站查询地址

2025/3/20 0:35:39 来源:https://blog.csdn.net/weixin_44795266/article/details/146263304  浏览:    关键词:长安网站建设详细教程_甘肃兰州今天的最新消息_推广下载_网站查询地址
长安网站建设详细教程_甘肃兰州今天的最新消息_推广下载_网站查询地址

在使用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 ECwait = 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() + timeoutwhile time.time() < end_time:try:element = driver.find_element(by, value)if element.is_displayed():return elementexcept Exception:passtime.sleep(1)  # 每隔1秒检查一次raise TimeoutError("等待元素超时")

总结

  • 隐式等待提供了一种简单的方式为所有元素查找设置统一的超时时间,适合应用于需要一致等待策略的场景。
  • 显式等待则允许更加精准地控制何时继续执行,基于特定条件进行等待,非常适合复杂或动态变化的应用界面。
  • 避免直接使用time.sleep(),除非确实有必要,因为这会导致不可预知的延迟,影响测试性能。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com