1、等待UI元素
poco等待UI元素的方式有三种:等待一个元素,等待多个元素,等待任一元素
代码示例: #定位三个元素 ele1 = poco(text=“text_content_1”) ele2 = poco(text=“text_content_2”) ele3 = poco(text=“text_content_3”) 等待一个元素出现:ele1.wait_for_appearance(timeout=10) 等待多个元素都出现(10秒钟找不到就失败):poco.wait_for_all([ele1,ele2,ele3],timeout=10) 等待任一元素出现:poco.wait_for_any([ele1,ele2,ele3])
2、滑动或拖动
poco(text='比赛').drag_to(poco(text='开始')) #把比赛元素拖动到开始元素上(拖拽) poco.swipe([0.9, 0.2], [0.1, 0.2],duration=0.3)...............滑动屏幕时停留0.3秒(起点,终点)
3、UI元素属性获取
a=poco("android.widget.Button").attr('name').....................提取指定元素属性为name的值
4.获取父节点下 的子节点
#children()获取子节点
node_my=poco("android:id/content").child("android.widget.LinearLayout").children()
for node in node_my:#........遍历子节点
index_my = node.get_text()
print(index_my)
5.按住拖拽
ui1=poco("ui1") ui2=poco("ui2") ui1.start_gesture().hold(1).to(ui2).hold(1).up() #在ui1元素上按下,等待1秒,拖拽到ui2元素上再等1秒,最后抬起释放
6.在子节点下返回上级(多级)
#返回多级并获取值
icon=poco(text="朋友圈").parent().parent().parent()#返回上级(这里表示返回三级) icon2=icon.sibling()#sibling()获取当前节点的兄弟节点(第4级)
for i in icon2: print(i.attr('name')) print ('朋友圈图标节点name值:{},size值: {}'.format(i.attr('name'),i.attr('size')))
7.判断手机是否安装了微信
#方法一
pkg_list = shell("pm list packages") if "com.tencent.mm" in str(pkg_list): print("已安装微信")
#方法二
from airtest.core.android import adb
if adb.ADB(serialno='54a4c6159804').check_app("com.tencent.mm"):
print("已安装微信")
8.在文本编辑器使用截图方式判断
if exists(Template(r"tpl1570614636993.png", record_pos=(0.425, -0.849), resolution=(720, 1280))): print('进入游戏成功') else: print('进入游戏失败')
9.如何遍历当前界面中是否存在某个控件
#用于初始化脚本运行环境 for x in range(10): Close = poco("控件") if Close.exists() Close.click() else: break
10 图像模式
if wait(Template(r"tpl1568978563547.png", record_pos=(-0.022, 0.274), resolution=(720, 1280)),5): #........................在5秒内找不到元素则异常(不指定时间默认为20秒)
touch((125.0,1038.0)).........坐标点击
11.poco模式
if poco(text="同意并进入游戏").wait(10).exists(): #...................10内找不到元素就判断失败
12.指定设备运行
from airtest.core.api import * from poco.drivers.android.uiautomation import AndroidUiautomationPoco connect_device("Android://127.0.0.1:5037/ea91a8e0")#指定设备运行
#connect_device("Android:///")#会默认取当前连接中的第一台手机
#connect_device(Windows:///123456)#去windows窗口(用于web测试)
poco=AndroidUiautomationPoco(force_restart=False)
start_app('包名').......启动包名开始测试
13.在多张图片中匹配
#——————————先把需要的图片放到目录下——————————————————
#在多张图片中匹配,只要有一张匹配成功就退出
img=["tpl1575428821281.png","tpl1575429643356.png"] for i in img: pos = exists(Template(i))#判断当前是否存在此图片if pos:#如果存在就点击 touch(pos)# break
#____________自定义语句提高图像脚本兼容性____________
#对于设备长宽比不同、设备分辨率不同、多种字体的情况,我们可以通过语法来提高兼容性。这种方式需要连接上脚本兼容性有问题的设备,把对应截图纳入搜索列表。代码脚本如下:
picList = [pic1,pic2,pic3] # 截图的图片对象列表
for pic in picList:
pos = exists(pic)
if pos:
touch(pos)
break # 只要找到图片列表中的任何一张图片,就执行touch
14自定义截图
# -*- encoding=utf8 -*- __author__ = "Administrator" from airtest.core.api import * from airtest.core.android import adb from airtest.aircv import * ##from poco.drivers.android.uiautomation import AndroidUiautomationPoco auto_setup(__file__) ##poco=AndroidUiautomationPoco(force_restart=False) connect_device("Android://127.0.0.1:5037/54a4c6159804") def local_screen():#需要导入from airtest.aircv import * '''airtest局部截图''' screen = G.DEVICE.snapshot() local_screen = aircv.crop_image(screen,(737,737,1080,820))#指定区域 pil_img = utils.cv2_2_pil(local_screen) pil_img.save("C:/Users/Administrator/Desktop/mxlm_23/首页.png", quality=99, optimize=True) def screen():#需要导入from airtest.aircv import * '''airtest普通截图''' screen = G.DEVICE.snapshot() pil_img = utils.cv2_2_pil(screen)#或者cv2_2_pil(screen) pil_img.save("C:/Users/Administrator/Desktop/mxlm_23/23.png", quality=99, optimize=True) local_screen() screen()
15.断言
assert_equal(name,"登录","判断登录按钮是否存在")........判断name是否等于'登录'
assert_exists(Template(r"tpl1575431661501.png", record_pos=(-0.345, -0.29), resolution=(1080, 1920)), "判断图片是否存在")
补充unittest断言:
assertEqual(arg1, arg2, msg=None).............验证arg1=arg2,不等则fail
assertNotEqual(arg1, arg2, msg=None).........验证arg1 != arg2, 相等则fail
assertTrue(expr, msg=None).............验证expr是true,如果为false,则fail
assertFalse(expr,msg=None).............验证expr是false,如果为true,则fail
assertIs(arg1, arg2, msg=None).........验证arg1、arg2是同一个对象,不是则fail
assertIsNone(expr, msg=None)...........验证expr是None,不是则fail
assertGreater (first, second, msg = None)...........验证first > second,否则fail
assertGreaterEqual (first, second, msg = None)......验证first ≥ second,否则fail
assertLess (first, second, msg = None)..............验证first < second,否则fail
assertLessEqual (first, second, msg = None).........验证first ≤ second,否则fail
assertRegexpMatches (text, regexp, msg = None)......验证正则表达式regexp搜索匹配的文本text。 regexp:通常使用re.search()
复杂断言
assertListEqual (list1, list2, msg = None)..........验证列表list1、list2相等,不等则fail,同时报错信息返回具体的不同的地方
assertDictEqual (expected, actual, msg = None)......验证字典expected、actual相等,不等则fail,同时报错信息返回具体的不同的地方
参考文档:
https://www.cnblogs.com/wutaotaosin/articles/11396827.html
https://blog.csdn.net/AirtestProject/article/details/105990890
https://www.cnblogs.com/AirtestProject/p/12156436.html.................脚本兼容优化