赞
踩
UI自动化常用的那些方法和操作,做UI的基本都是通用的。
说起UI自动化测试,尤其是移动端UI自动化,测试框架和技术层出不穷。经过多框架对比后,最终选择了AirTest。
Airtest主要有以下优势:
(1)UI自动化基于Airtest和PocoUI进行,该框架是网易开源框架,专业团队开发维护,比较稳定。
(2)Airtest基于图像识别算法,对图片进行模版匹配和特征点匹配,以此计算点击坐标,进行操作;
(3)PocoUI基于minitouch进行操作,可通过text/resouceid/name等进行元素定位。
(4)支持多平台:安卓、IOS、Unity、小程序、H5
可以将一些通用的操作写在一个.air脚本中,然后在其他脚本中import它。
|
在编写自动化的过程中,有一些自定义的方法或类,需要在.air下的.py中引用时候,需要将项目路径添加到环境变量中。
|
(1)建议尽量使用text定位元素
poco(text='立即清理') # 模糊定位,支持正则 |
(2)如果不能直接定位,建议使用局部布局
# 子元素 |
备注:
(1)点击元素的某一点
通过相对坐标,控制点击的具体位置。左上角(0, 0),右下角(1, 1),横坐标为x,纵坐标为y。
node = poco(text='main_node') |
(2)等待元素出现或消失
实际写用例时,有一些扫描或缓冲场景,需要等待元素出现或消失,才能进行下一步操作。
# 当使用wait_for_appearance或wait_for_disappearance时,建议处理PocoTargetTimeout,并截图,以方便在报告中查看出错时的页面情况 |
(3)滑动和拖动
# 拖动
|
(4)获取元素信息
""" .... |
(5)连续滑动与自定义滑动操作
from airtest.core.api import *
# 手势操作 |
(6)点击元素偏移位置
# 点击, focus为偏移值,sleep_interval为点击后的间隔时间 |
(7)隐性等待元素
# 隐形等待元素出现,元素出现后,wait()方法结束 |
(8)判断元素是否存在
# 判断元素是否存在,存在返回True |
(9)UI状态清除
# 在poco里选择出来的ui都是代理对象,在执行同一个用例里,一个ui控件选出来后能持续多长时间有效这个是要看android那回收ui资源的策略的,每个厂商的差异比较大. |
(10)long click
# 长按操作 |
(11)两指挤压收缩操作
# 在给定的范围和持续时间下,在UI上两指挤压收缩操作 |
(12)根据UI滑动
# 根据UI的给定高度或宽度,滑动距离的百分比 |
这个异常特指无效的操作,或者不起作用的操作
try: |
如果从一个不存在的UI空间读取属性或操作,就会出现该异常。
node = poco("not existed node")
|
这个异常只会在你主动等待UI出现或消失时抛出,和 PocoNoSuchNodeException 不一样,当你的操作速度太快,界面来不及跟着变化的话,你只会遇到 PocoNoSuchNodeException 而不是 PocoTargetTimeout ,其实就是在那个UI还没有出现的时候就想要进行操作。
try: |
如果操作速度远远慢于UI变化的速度,很可能会出现这个异常。当且仅当访问或操作一个刚才存在现在不在的UI元素时,才会出现,并且一般不会出现。
try: |
滚动查找元素,当找到元素后,滑动元素到页面中间。
用法:poco_swipe_to(text=None, textMatches=None, poco=None)
# 滚动查找元素 |
说明:利用子进程对页面元素进行监控,发元素后,自动操作。
适用场景:多用于不可预测的弹窗或元素
用法:watcher(text=None, textMatches=None, timeout=10, poco=None)
def loop_watcher(find_element, timeout): |
poco.wait_for_any(),等待到任一元素出现,返回UIObjectProxy。
check_list = [poco(text="可清理"), poco(text = '手机很干净')] poco.wait_for_any(check_list, timeout=20) |
poco.wait_for_all(),等待所有元素出现。
check_list = [poco(text="可清理"), poco(text = '手机很干净')] |
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。