付费下载
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】Android自动化测试如何处理各种弹窗
今天在下给大家分享一下Android自动化测试如何处理各种弹窗的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。安装APP时的系统弹窗此类弹窗一般有两种,一种是自动化测试框初始化本身也需要安装一些APP,比如uiautomator2会安装atx-agent、com.github.uiautomator,这些弹窗在初始化环境的时候可以手动点掉,case里不需要关注。另一种就是安装我们的被测app,像下面这种都是我们不得不去处理的,不然,自动化也就是不自动了。APP启动时的权限弹窗这类弹窗是APP在启动时会申请一些基础的权限弹窗处理本文使用的是uiautomator2这个自动化框架,它提供了一种watcher对象,可以用来配置要监控的元素,这里我们配置要监控的就是页面上的弹窗,下面来看看具体怎么做。watcher的使用#
常用写法,注册匿名监控
d.watcher.when("安装").click()
#
注册名为ANR的监控,当出现ANR和Force
Close时,点击Force
Close
d.watcher("ANR").when(xpath="ANR").when("Force
Close").click()
#
其他回调例子
d.watcher.when("抢红包").press("back")
d.watcher.when("//*[@text
=
"Out
of
memory"]").call(lambda
d:
d.shell("am
force-stop
com.im.qq"))
#
回调说明
def
click_callback(d:
u2.Device):
d.xpath("确定").click()
#
在回调中调用不会再次触发watcher
d.xpath("继续").click()
#
使用d.xpath检查元素的时候,会触发watcher(目前最多触发5次
#
移除ANR的监控
d.watcher.remove("ANR")
#
移除所有的监控
d.watcher.remove()
#
开始后台监控
d.watcher.start()
d.watcher.start(2.0)
#
默认监控间隔2.0s
#
强制运行所有监控
d.watcher.run()
#
停止监控
d.watcher.stop()
#
停止并移除所有的监控,常用于初始化
d.watcher.reset()上面是watcher的一些常用api以及解释,来源于github。嘻嘻,自己懒的写了。下面我们用B站apk为例,处理从安装到登录后的一系列弹窗。import
uiautomator2
as
u2
import
os
import
time
base_dir
=
os.path.dirname(__file__)
apk_path
=
os.path.join(base_dir,
"apks/bilibili.apk")
d
=
u2.connect_usb(serial="MDX0220924018819")
#
从安装到登录成功后,可能会出现的弹窗,在这里进行注册,这个是华为手机出现的弹窗类型
d.watcher.when("继续安装").click()
d.watcher.when("完成").click()
d.watcher.when("同意并继续").click()
d.watcher.when("我知道了").click()
d.watcher.start()
d.app_install(apk_path)
d.app_start("tv.danmaku.bili")
d(text="我的").click()
time.sleep(3)
if
d(resourceId="tv.danmaku.bili:id/btn_change_account").exists:
d(resourceId="tv.danmaku.bili:id/btn_change_account").click()
else:
d(resourceId="tv.danmaku.bili:id/tv_login").click()
time.sleep(3)
d(resourceId="tv.danmaku.bili:id/username").set_text("xxxxxxxxx")
d(resourceId="tv.danmaku.bili:id/userpwd").set_text("xxxxxxxx")
d(resourceId="tv.danmaku.bili:id/log_reg_checkbox").click()
time.sleep(2)
d(resourceId="tv.danmaku.bili:id/btn_login").click()
d(text="首页").click()弹窗处理的核心思想是,起一个线程,不停的监听页面上有没有弹窗出现,出现了就点击,或点击取消或点击确认等等。采用了后台运行了一个线程的方法(依赖threading库),然后每隔一段时间dump一次hierarchy,匹配到元素之后执行相应的操作。class
Watcher():
def
__init__(self,
d:
"uiautomator2.Device"):
self._d
=
d
self._watchers
=
[]
self._watch_stop_event
=
threading.Event()
self._watch_stopped
=
threading.Event()
self._watching
=
False
#
func
start
is
calling
self._triggering
=
False
self.logger
=
setup_logger()
self.logger.setLevel(logging.INFO)
def
when(self,
xpath=None):
return
XPathWatcher(self,
xpath)Watcher对象个self._watchers属性来维护所有要监控的元素,d.watcher.when("继续安装")当我们调用when方法后会返回一个XPathWatcher对象,然后再调用这个对象的click方法实现对监控元素的操作。class
XPathWatcher():
def
__init__(self,
parent:
Watcher,
xpath:
str,
name:
str
=
""):
self._name
=
name
self._parent
=
parent
self._xpath_list
=
[xpath]
if
xpath
else
[]
def
when(self,
xpath=None):
self._xpath_list.append(xpath)
return
self
def
call(self,
func):
"""
func
accept
argument,
key(d,
el)
d=self._d,
el=element
"""
self._parent._watchers.append({
"name":
self._name,
"xpaths":
self._xpath_list,
"callback":
func,
})
def
click(self):
def
_inner_click(selector):
selector.get_last_match().click()
self.call(_inner_click)click方法就是将点击的操作放到回调函数,然后调用XPathWatcher对象的call方法,这个方法会生成一个监控规则,并将监控规则放到我们前面提到的Watcher对象的self._watchers属性。def
start(self,
interval:
float
=
2.0):
"""
stop
watcher
"""
if
self._watching:
self.logger.warning("already
started")
return
self._watching
=
True
th
=
threading.Thread(name="watcher",
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026宁夏教育厅招聘教研员8人考试备考题库及答案解析
- 2026安徽安庆市潜山市卫生健康系统赴高校招聘卫生专业技术人员14人笔试备考题库及答案解析
- 2026广东清远市阳山县融媒体中心招聘新闻人员4人笔试备考试题及答案解析
- 2026四川长虹民生物流股份有限公司招聘保险及资产主管岗位1人笔试参考题库及答案解析
- 2026年武汉海事职业学院单招职业技能考试题库有答案详细解析
- 2026武汉重型机床集团有限公司春季校园招聘笔试模拟试题及答案解析
- 2026重庆市涪陵区新妙镇招聘公益性岗位1人笔试参考题库及答案解析
- 2026山东枣庄市柳琴戏保护传承中心(枣庄市艺术剧院)首批急需紧缺人才招聘1人考试备考题库及答案解析
- 2026年山西晋中学市榆次区初三3月第二次月考综合试题含解析
- 2026届福建省厦门市湖里中学全国普通高中初三二月大联考英语试题含解析
- 《自主移动机器人 》课件 第3章 运动学建模 1 概述及轮式移动运动学建模
- 新《金融机构客户受益所有人识别管理办法》全文解读课件
- 2026年铁岭卫生职业学院单招职业技能考试题库及参考答案详解
- 高处作业吊篮安装、拆卸、使用技术规程(2025版)
- 超详细的 光伏工程质量控制手册(全流程)
- 餐饮服务礼仪礼貌培训
- 2026年安徽林业职业技术学院单招综合素质考试必刷测试卷附答案
- 常见眼病讲解
- 2025年山东档案职称考试《档案工作实务》考试题库(浓缩500题)
- 《盐碱地改良技术规范》
- 工业电伴热带使用说明及维护手册
评论
0/150
提交评论