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

简介: 用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的测试框架,只要运行环境中存在这俩个库,都是可以根据实际需要随意混用的。


报告



最后我们来查看下运行报告,可以看到登录和退出流程都是成功的,步骤标注点显示也很清晰:



相关文章
|
5月前
|
Java 数据安全/隐私保护 Python
心得经验总结:校园网自动登录app
心得经验总结:校园网自动登录app
42 0
一日一技:Airtest连接多个手机的时候,如何start_app?
一日一技:Airtest连接多个手机的时候,如何start_app?
502 0
|
API
利用QT实现主界面APP应用开发之经典
利用QT实现主界面APP应用开发之经典
308 1
利用QT实现主界面APP应用开发之经典
|
消息中间件 编解码 运维
阿里云开发者社区APP服务上线!实现课程、训练营碎片化学习~
阿里云开发者学堂课程&训练营自上线起用户好评不断,本月阿里云开发者社区的APP服务终于上线!实现移动端学习,在地铁上也可以刷刷刷啦
阿里云开发者社区APP服务上线!实现课程、训练营碎片化学习~
|
Linux iOS开发 开发者
实现在windows、linux下上传ios app到App Store
实现在windows、linux下上传ios app到App Store
实现在windows、linux下上传ios app到App Store
|
JSON JavaScript 安全
基于Windows微信实现实时收发微信消息App
基于Windows微信实现实时收发微信消息App
1376 0
基于Windows微信实现实时收发微信消息App
|
监控 前端开发 Java
Android自定义控件(十)——SurfaceView实战实现天气APP背景移动效果
Android自定义控件(十)——SurfaceView实战实现天气APP背景移动效果
448 0
|
XML 编解码 前端开发
应用层安卓app的基本原理与实现之经典
今天主要和大家聊一聊,如何利用Android Studio实现一个app,虽然说可以利用QT来制作app,但是和Android Studio还是差很多。接下来主要是来熟悉一下其中的操作步骤。
286 0
应用层安卓app的基本原理与实现之经典
|
存储 XML 缓存
如何用App实现巡检业务数字化?以YonBuilder移动开发平台APICloud为例
一款消防检查app可以有效减少繁复工作、提升巡检效率。本文将详细介绍如何使用YonBuilder移动开发平台开发消防检查助手app。
438 0
|
测试技术 Android开发
Android实现同时安装测试环境与生产环境包,及区分app名和图标
众所周知,相同包名的APP,是不能同时安装的,但是我们实际开发中,测试同学往往在测试环境没问题,上了生产环境,却发现了bug,这时候就只能卸载生产环境的包,再去安装测试环境。
467 0
Android实现同时安装测试环境与生产环境包,及区分app名和图标