用Airtest和poco實現APP自動登錄和退出


前言

今天我們將完成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

 

 


免責聲明!

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



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