《自拍教程61》Python adb反复启动退出高德地图App

网友投稿 322 2022-06-26


准备阶段

adb shell am start + 指定的Package包名 + Activity活动页面,可以打开App

可以通过adb shell 里边的pm list package | grep amap来查看包名

最终我们获取到高德地图的包名是:com.autonavi.amapauto,

可以在高德地图App界面,通过adb shell 里边的dumpsys window | grep Activity,来查看当前活动窗口的Activity,

最终是: com.autonavi.amapauto/com.autonavi.amapauto.MainMapActivity

adb shell am force-stop + 指定的Package包名,可以直接关闭App,无需加Activity。

注意:自动截取过程中,需要确保后台的logcat日志,高德地图log,tombstone等都是正常在后台打开并持续截取的。

Python批处理脚本形式

记住批处理脚本的精髓:顺序批量执行

# coding=utf-8

import os

import time

for i in range(100000):

print("正在进行第%s轮高德地图重启测试" % i)

os.system("adb shell am start com.autonavi.amapauto/com.autonavi.amapauto.MainMapActivity")

os.system("adb shell screencap -p /sdcard/a.png")

os.system("adb pull /sdcard/a.png D:\\MapTest\\once_%s.png" % i) # App启动中的截图

time.sleep(5)

os.system("adb shell screencap -p /sdcard/a.png")

os.system("adb pull /sdcard/a.png D:\\MapTest\\twice_%s.png" % i) # App启动完成的截图

os.system("adb shell am force-stop com.autonavi.amapauto")

os.system("pause")

Python面向过程函数形式

只需要一个函数reboot_apk,但是需要传递2个参数进去。

# coding=utf-8

import os

import time

# 封装,只留2个参数接口

def reboot_app(package_name, activity_name):

os.system("adb shell am start %s/%s" % (package_name, activity_name))

os.system("adb shell screencap -p /sdcard/a.png")

os.system("adb pull /sdcard/a.png D:\\MapTest\\once_%s.png" % i) # App启动中的截图

time.sleep(5)

os.system("adb shell screencap -p /sdcard/a.png")

os.system("adb pull /sdcard/a.png D:\\MapTest\\twice_%s.png" % i) # App启动完成的截图

os.system("adb shell am force-stop %s" % package_name)

# 调用

for i in range(1000000):

print("正在进行第%s轮高德地图重启测试" % i)

reboot_app("com.autonavi.amapauto", "com.autonavi.amapauto.MainMapActivity")

os.system("pause")

Python面向对象类形式

以"万物皆可归类"的思想, 先抽象化出一个类来,

类名一般建议用"名词", 所以我们命名为"AppRebooter",

代表App反复重启器, 且一般要驼峰式(首字母大写)来规范类的命名.

养成良好的类的初始化(init)的习惯,

初始化过程中,需要说明是什么App的package和acitivity

这个AppRebooter类, 目前只需要一个重启apk的函数(动作功能)就足够了,

函数的命名一般建议用"动词", 所以我们命名为: "reboot_apk" .

类是一个抽象的事物, 必须实例化成具体的对象后,

才能进行调用, 所以我们实例化并命名成了a_obj, 表明是一个对象.

实例化成具体对象后, 对象就可以调用reboot_apk这个函数了.

# coding=utf-8

import os

import time

class AppRebooter():

def __init__(self, package_name, activity_name):

self.package_name = package_name

self.activity_name = activity_name

def reboot_app(self):

os.system("adb shell am start %s/%s" % (self.package_name, self.activity_name))

os.system("adb shell screencap -p /sdcard/a.png")

os.system("adb pull /sdcard/a.png D:\\MapTest\\once_%s.png" % i) # App启动中的截图

time.sleep(5)

os.system("adb shell screencap -p /sdcard/a.png")

os.system("adb pull /sdcard/a.png D:\\MapTest\\twice_%s.png" % i) # App启动完成的截图

os.system("adb shell am force-stop %s" % self.package_name)

if __name__ == '__main__':

a_obj = AppRebooter("com.autonavi.amapauto", "com.autonavi.amapauto.MainMapActivity")

for i in range(1000000):

print("正在进行第%s轮高德地图重启测试" % i)

a_obj.reboot_app()

os.system("pause")

运行方式与效果


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:接口开发的实现(接口开发方案)
下一篇:django-admin和manage.py用法(django vue admin pro)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~