airtest使用記錄


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM