appium+python自动化实践之查找元素的等待方式

实际测试过程中,比如点击一个控件需要启动一个新activiy界面,或需要加载弹框,或请求网络加载数据成功后刷新界面,此时需要等待一段时间,新界面出现了才能继续执行UI操作,否则还在加载中,程序已开始执行新界面操作的代码,脚本就会报错了。

开始写测试脚本时,没有考虑到等待过程,导致脚本调试失败,报错后考虑到实践过程,于是添加了等待,搜索了一些资料,发现主要是通过以下3种方式实现:


1.固定等待时间:python time模块提供了sleep()方法

import time   #添加 time 模块

sleep(5)  #等待5s

2.WebDriverWait,显示等待方法
添加接口模块:
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions 
from selenium.webdriver.common.by import By
测试套件中调用: 

WebDriverWait(driver,10).until(expected_conditions.xx()))   # .xx()参考以下的 2)expected_conditions类提供的预期条件判断方法


WebDriverWait类是webdriver提供的等待方法,该类提供的until()和until_not()方法再根据判断条件expected_conditions进行等待,until()方法在返回为True时中断等待,until_not()方法在返回值为Flase时中断等待
1) WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exceptions=None)
driver: webdriver实例对象
timeout: 最长超时时间
poll_frequency: 检测间隔时间,默认0.5s
ignored_exceptions: 超时后的异常信息,默认情况抛出NoSuchElementException异常

2)expected_conditions类提供的预期条件判断方法:
title_is: 判断当前页面的title是否完全等于(==)预期字符串,返回布尔值
title_contains : 判断当前页面的title是否包含预期字符串,返回布尔值
presence_of_element_located : 判断某个元素是否被加到了dom树里,并不代表该素一定可见
visibility_of_element_located : 判断某个元素是否可见. 可见代表元素非隐藏,并且元素的宽和高都不等于0
visibility_of : 跟上面的方法做一样的事情,只是上面的方法要传入locator,这个方法直接传定位到的element就好了
presence_of_all_elements_located : 判断是否至少有1个元素存在于dom树中。
text_to_be_present_in_element : 判断某个元素中的text是否 包含 了预期的字符串
text_to_be_present_in_element_value : 判断某个元素中的value属性是否 包含 了预期的字符串
frame_to_be_available_and_switch_to_it : 判断该frame是否可以switch进去,如果可以的话,返回True并且switch进去,否则返回False
invisibility_of_element_located : 判断某个元素中是否不存在于dom树或不可见
element_to_be_clickable : 判断某个元素中是否可见并且是enable的,这样的话才叫clickable
staleness_of : 等某个元素从dom树中移除,注意,这个方法也是返回True或False
element_to_be_selected : 判断某个元素是否被选中了,一般用在下拉列表
element_selection_state_to_be : 判断某个元素的选中状态是否符合预期
element_located_selection_state_to_be : 跟上面的方法作用一样,只是上面的方法传入定位到的element,而这个方法传入locator
alert_is_present : 判断页面上是否存在alert


3.隐式等待Implicit Waits
查找元素的时候,如果没能立刻发现,就等待固定长度的时间,对整个driver的周期都起作用,只需要设置一次,加入后一直生效,直到修改隐式等待时间或 driver 退出。
driver.manage().timeouts().implicitlyWait(second, TimeUnit.SECONDS)


小结:appium 查找元素等待时间,比较常用的是显示等待方法(推荐),固定sleep时间和隐式等待这2种方法也可用,建议在使用场景时尽量考虑适合的等待方法。


参考文章:
http://www.cnblogs.com/imyalost/p/7420924.html
http://www.jianshu.com/p/bf27aad96614








猜你喜欢

转载自blog.csdn.net/hdandan2015/article/details/78407627