AirtestProject 用 Airtest 和 poco 实现 APP 自动登录和退出

fishfish-yu · April 02, 2020 · Last by fishfish-yu replied at April 03, 2020 · 849 hits

此文章来源于项目官方公众号:“AirtestProject”
版权声明:允许转载,但转载必须保留原链接;请勿用作商业或者非法用途

前言

今天我们将完成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官网:airtest.netease.com/

Airtest教程官网:airtest.doc.io.netease.com/

搭建企业私有云服务:airlab.163.com/b2b

共收到 2 条回复 时间 点赞

看到加了好几个sleep,有其他更加好的处理方法吗?
比如增加全局隐式等待或者显示等待

花菜 回复

sleep就是显示等待~

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up