马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
在使用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(),除非确实有须要,由于这会导致不可预知的延伸,影响测试性能。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
|