前言
今天我們將完成1個實操,來實現APP自動登錄和退出的流程。
示例APP為:網易新聞APP; 所用IDE版本為:1.2.3。
要求
① 報告中所有圖片要有較高的精度
② 登錄成功和退出成功必須有斷言
③ 在報告中顯示出哪部分步驟用於登錄,哪部分步驟用於退出
完成登錄流程
① 打開網易新聞APP
② 在底部菜單 “我” 點擊登錄
③ 清除歷史賬號信息
④ 輸入賬號密碼
⑤ 點擊 “開始使用” 完成登陸操作
⑥ 利用出現頭像圖片來斷言登錄成功
# -*- encoding=utf8 -*- __author__ = "Airtest" from airtest.core.api import * # 設置全局圖片精度為75 ST.SNAPSHOT_QUALITY = 75 from poco.drivers.android.uiautomation import AndroidUiautomationPoco poco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False) auto_setup(__file__) log("以下步驟完成登錄操作") # 利用包名打開網易雲新聞 start_app("com.netease.newsreader.activity") sleep(2.0) # 點擊底部菜單“我” poco("android.widget.LinearLayout").offspring("android:id/tabs").child("android.widget.LinearLayout")[4].offspring("com.netease.newsreader.activity:id/h6").click() # 點擊“注冊/登錄” poco("com.netease.newsreader.activity:id/ans").click() # 點擊並清空賬號輸入框 poco("com.netease.newsreader.activity:id/af_").click() sleep(1.0) poco("com.netease.newsreader.activity:id/af_").set_text(" ") sleep(1.0) # 輸入賬號 poco("com.netease.newsreader.activity:id/af_").set_text("1882610xxxx") # 選擇第一種郵箱格式 touch((411,560)) sleep(1.0) # 輸入郵箱密碼並點擊“開始使用” poco("com.netease.newsreader.activity:id/ag5").set_text("1111") poco("com.netease.newsreader.activity:id/ag7").click() sleep(2.0) # 存在頭像圖片則斷言登錄成功 assert_exists(Template(r"tpl1585550255116.png", record_pos=(-0.337, -0.55), resolution=(1080, 1920)), "登錄成功")
知識點一
① 設置圖片精度
當 Airtest版本≥1.1.2 時,我們可以自定義截圖壓縮精度。Airtest默認取 10 ,如果希望獲得更高精度的圖片可以將值改為 75 :
# 設置全局的截圖壓縮精度 import airtest.core.api import * ST.SNAPSHOT_QUALITY = xxx # [1, 99] # 設置單張截圖的壓縮精度 snapshot(quality=my_quality)
② 用 start_app("包名")
打開APP
當我們想要打開某個APP時,除了可以使用 icon點擊 或者 Poco的點擊 之外,我們還可以使用 start_app("包名")
非常便捷地打開1個APP。獲取應用包名的方式在網上有很多,甚至直接搜索“xx應用的包名”也很容易獲取到。
③ 使用坐標點擊
在上述示例中,我們輸入郵箱賬號的前綴以后,系統給我們提供了多種郵箱格式以供選擇,但寫腳本的時候你會發現,使用poco無法很好地識別到這些控件;使用圖像識別,又因為幾乎是純文字,很有可能識別效果並不好;這時候可以考慮使用坐標點擊,腳本簡潔,效果還好。
完成退出流程
① 點擊 “設置” ,在 “設置” 中定位到 “退出登錄”
② 點擊 “退出登錄” ,並點擊 “確認退出” 的彈窗
③ 利用出現 “登錄” 按鈕來斷言退出成功
log("以下步驟完成退出登錄操作") # 點擊設置 poco(text="設置").click() # 下滑找到“退出登錄”按鈕並點擊 swipe(Template(r"tpl1585549988205.png", record_pos=(-0.252, -0.12), resolution=(1080, 1920)), vector=[-0.0957, -0.2859]) poco("com.netease.newsreader.activity:id/bn4").click() # 點擊彈窗中的“確認退出” poco("com.netease.newsreader.activity:id/apz").click() # 存在登錄按鈕則斷言退出成功 assert_exists(Template(r"tpl1585550042580.png", record_pos=(-0.003, -0.414), resolution=(1080, 1920)), "退出成功")
知識點二
① 使用 log(str_msg)
在報告顯示信息
我們想在報告中區分,哪部分步驟是用於登錄,哪部分步驟是用於退出的,這時候可以利用 log(str_msg)
來完成,只需要在 log()
方法里面傳入你想表達的字符串即可。
② 混合使用Airtest和Poco腳本
有些同學提問:腳本里面可不可以混用Airtest和Poco腳本?答案當然是可以的,因為Airtest和Poco都是基於python的測試框架,只要運行環境中存在這倆個庫,都是可以根據實際需要隨意混用的。
報告
最后我們來查看下運行報告,可以看到登錄和退出流程都是成功的,步驟標注點顯示也很清晰:
Airtest官網:http://airtest.netease.com/
Airtest教程官網:https://airtest.doc.io.netease.com/
搭建企業私有雲服務:https://airlab.163.com/b2b