APP自动化测试之常见API:3.三种等待
1.前提
基于win10专业版64位系统+jdk1.8+python3+pycharm+android SDK+appium+unittest。一个简单的demo,引入多个常见API的使用。
2. 三种等待
GUI自动化测试代码执行过程中,往往通过定位页面元素属性来操作元素,但往往由于网络和本身代码等问题,导致要操作的元素可能没等定位到就报错找不见某属性的元素,从而脚本停止运行。通俗点讲,就是代码跑的太快,但页面元素加载过慢而导致定位不到元素出错的问题。如何解决呢?通常有如下三种解决方案。
2.1 强制等待
代码执行到该行,整个脚本直接强制停止往下执行,等待设置的对应时间后才继续往下执行后面的脚本。
from time import sleep #要使用time模块的sleep方法必须先导包 print(“111”) sleep(3) #强制等待3秒在继续往下执行 print(“222”) |
2.2 隐式等待
针对页面整个元素的加载,通俗讲load页面时,转圈完了就可以继续往下了,如果超过指定的时间就报错。比如设置10秒,如果在指定的时间内提前加载完页面并定位到了就直接往下,不需要等10秒结束后才继续往下。
from appium import webdriver dr = webdriver.Remote("http://localhost:4723/wd/hub", {}) dr.implicitly_wait(10)#隐式等待 |
2.3显示等待
针对页面指定元素的加载,比如指定元素定位到了就直接往下,不用等整个页面加载完毕才往下。比如下方代码设置的检查机制是:最长等待10秒,每隔0.5秒检查一次,如果定位到的元素出现了,就直接往下,无序等待10秒结束才继续往下。另外0.5秒的检查频率可以自主设置。
from selenium.webdriver.support.wait import WebDriverWait element = WebDriverWait(dr,10,0.5).until(lambda dr: dr.find_element_by_id("barcode")) # 显示等待 element.send_keys("123456") |
注:三种等待至于具体使用哪种,没有固定的场景,往往在设计测试脚本时结合具体的产品业务环境,应灵活运用,往往是三者配合使用,别指望一种等待方式就把所有的测试场景问题就都解决了,即便是,也往往会存在代码整体时间效率问题。