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.................腳本兼容優化