app自动化如何获取appPackage和appActivity-mac系统

app自动化如何获取appPackage和appActivity-mac系统

大家都知道,appium的核心是一个
对外暴露一系列REST API供client调用的server。大致工作过程是这样的,servier监听一个端口,接收client发送过来的command,再把这些command转换为移动设备可以理解的形式发送给移动设备,移动设备执行完这些command后将结果再返回给appium server,server再将结果返回给client。
而client和server之间是通过session进行对话的,所有的自动化程序都是在这个session上下文中进行。因此,无论何种客户端库,都会先给服务器发起一个会话,其实就是给服务器发起一个POST/session的请求,请求中包含一个Desired Capabilites(预期能力)。这是server就会创建一个会话,并返回一个全剧唯一的session id,用于后续使用。其实这个session id 就代表着这个自动化使用的是哪个浏览器,或者移动设备。
这里大家就可以猜到,这个Desired Capabilites(预期能力)应该就是告诉server我想要打开什么样的设备,这个设备具有怎样的能力。其实Desired Capabilities就是一系列的键值对集合,用来告诉servier启动什么样的自动化会话。而我们今天要说的appPackage和appActivity就是Desired Capabilites(预期能力)的其中两个。这两个Capabilite是Android设备特有的,用来告诉server要打开android设备的哪个app。
那么这两个东西怎么找到呢,如果是测试自己公司的app,那就直接让开发提供。而很多情况下,我们要拿到的是第三方app,那么就只能自己凭本事去找了。网上介绍了很多方法,我自己几乎都试过,大多数都是无效的,或者不太好用的。接下来就直奔主题:
使用 adb logcat | grep ActivityRecord
在这里插入图片描述
这里我们可以看到,ActivityRecord里面就是具体的activity信息。

03-29 10:44:52.318  1584 13268 I ActivityTaskManager: ActivityRecord info: ActivityInfo{afc017f com.ximalaya.ting.android.host.activity.WelComeActivity}
03-29 10:44:52.318  1584 13268 D ActivityTaskManager: TaskLaunchParamsModifier:task=null activity=ActivityRecord{af78079 u0 com.ximalaya.ting.android/.host.activity.WelComeActivity t-1} display-from-source=0 display-id=0 display-windowing-mode=1
03-29 10:44:52.319  1584 13268 D ActivityTaskManager: TaskLaunchParamsModifier:task=null activity=ActivityRecord{af78079 u0 com.ximalaya.ting.android/.host.activity.WelComeActivity t-1} display-from-source=0 display-id=0 display-windowing-mode=1 activity-options-fullscreen=Rect(0, 0 - 0, 0) inherit-fullscreen non-freeform-display
03-29 10:44:52.321  1584 13268 D ActivityTaskManager: TaskLaunchParamsModifier:task=TaskRecord{ad3150c #7 A=com.ximalaya.ting.android U=0 StackId=6 sz=0} activity=ActivityRecord{af78079 u0 com.ximalaya.ting.android/.host.activity.WelComeActivity t-1} display-from-task=0 display-id=0 display-windowing-mode=1 activity-options-fullscreen=Rect(0, 0 - 0, 0) inherit-fullscreen non-freeform-display
03-29 10:44:52.322  1584 13268 V ActivityTaskManager: addAppToken: AppWindowToken{af780e9 token=Token{afbf44a ActivityRecord{af78079 u0 com.ximalaya.ting.android/.host.activity.WelComeActivity t7}}} task={taskId=7 appTokens=[] mdr=false} at 2147483647
03-29 10:44:52.330  1584  2127 I ActivityTaskManager: Making visible and scheduling visibility: ActivityRecord{af78079 u0 com.ximalaya.ting.android/.host.activity.WelComeActivity t7}
03-29 10:44:52.334  1584  2127 I WindowManager: Check opening app=AppWindowToken{af780e9 token=Token{afbf44a ActivityRecord{af78079 u0 com.ximalaya.ting.android/.host.activity.WelComeActivity t7}}}: allDrawn=false startingDisplayed=false startingMoved=false isRelaunching()=false startingWindow=Window{ab51609 u0 Splash Screen com.ximalaya.ting.android}

随便找几个出来看看:
ActivityRecord{21dce3e token=android.os.BinderProxy@4f79e3d {com.ximalaya.ting.android/com.ximalaya.ting.android.host.activity.MainActivity}}
ActivityRecord{6ba7208 token=android.os.BinderProxy@67e01cf {com.ximalaya.ting.android/com.ximalaya.ting.android.host.activity.MainActivity}}
这里就是我们想要的信息了,其中com.ximalaya.ting.android就是包名,.host.activity.MainActivity就是对应的activity。
拿到这些信息以后就可以去做你的自动化了,如我下面这里行代码,就是打开我测试手机上面的喜马拉雅听书:
在这里插入图片描述
这里有个问题,直接在终端打印,然后通过grep管道进行筛选,会筛选出所有的activity,要想在里面找到自己想要的app的activity有点困难。所以我们可以用另一种方式,使用重定向 > 将终端输出重定向到一个文件中,然后再去文件中查找。如:
adb logcat > ~/Desktop/log.log
这样我们就将adb logcat的输出重定向到了桌面的log.log文件中,再去这个文件中查找就很方便了。在这里插入图片描述

扩展内容:ActivityRecord是什么?
ActivityRecord是用来保存Activity信息的对象,一个ActivityRecord对应一个Activity,保存这个Activity所有的信息。但是一个Activity可能对应多个ActivityRecord,因为一个Activity可能被启动多次。
ActivityRecord{6ba7208 token=android.os.BinderProxy@67e01cf {com.ximalaya.ting.android/com.ximalaya.ting.android.host.activity.MainActivity}}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值