自动化测试不仅包括操作流,还包括对操作流结果的验证以及等待元素加载。
在本文中将着重对“等待与验证结果”进行探讨。
在实际应用中,我们常常会忽视页面跳转/加载等带来的延迟,这时去定位元素往往会报错,说定位不到这个元素。
这种情况我们就需要增加延迟,常用的方法有以下三种。
一、强制等待
初学者最常用的sleep,这种方法使用简单,但添加多了之后程序运行效率低
python用法:time.sleep(5)
效果:强制等待5秒
二、隐性等待
使用方法也比较简单,只需在开头设置一次即可,效率比强制等待高一点
python用法:driver.implicitly_wait(5)
效果:设置隐性等待5秒,当该driver要定位元素时马上去定位一次,如果定位不到则等待5秒再去尝试定位一次
三、显性等待
这种方法笔者用的比较多,效率最高,程序运行比较流畅
需要先导入WebDriverWait类,并且在设置appium启动参数时添加参数'automationName': "UiAutomator2",
from selenium.webdriver.support.wait import WebDriverWait
python用法:WebDriverWait(driver,10).until(lambda x: x.find_element_by_id("元素id"))
效果:等待元素加载,默认每0.5秒去定位一次该元素,最多等待10秒,即如果该元素0.5秒就加载出来了,则只会等待0.5秒就会继续运行
我们通常将一个流程写成一个测试函数,而流程的最后往往伴随着提示消息,一般为toast消息,我们验证结果的惯用手法是抓取toast消息,验证是否正确。
验证toast消息
这里也用到了上面的显性等待中的WebDriverWait
python用法:WebDriverWait(driver,5 ).until(lambda x: x.find_element_by_xpath("//*[contains(@text,'toast消息')]"))
效果:等待页面上出现包括该条“toast消息”的元素,默认每0.5秒去查询一次,最多等待5秒
如果搜索的内容在页面上唯一,且没有报错,那就是成功找到该条消息,即流程成功执行。
感谢阅读,欢迎转载。
如有错误请及时指出,谢谢!
如有问题请留言,我懂的必然会回复!
共勉。