前言
今天我们将完成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的测试框架,只要运行环境中存在这俩个库,都是可以根据实际需要随意混用的。
报告
最后我们来查看下运行报告,可以看到登录和退出流程都是成功的,步骤标注点显示也很清晰: