Desired Capabilities详解

Desired Capabilities详解,第1张

Desired Capabilities在启动session的时候是必须提供的。

Desired Capabilities本质上是key value的对象,它告诉appium server这样一些事情:

本次测试是启动浏览器还是启动移动设备?

是启动andorid还是启动ios?

启动android时,app的package是什么?

启动android时,app的activity是什么?

Appium的Desired Capabilities是扩展了webdriver的Desired Capabilities的,下面的一些通用配置是需要指定的:

automationName:使用哪种自动化引擎。appium(默认)还是Selendroid?

platformName:使用哪种移动平台。iOS, Android, orFirefoxOS?

deviceName:启动哪种设备,是真机还是模拟器?iPhone Simulator, iPad Simulator, iPhone Retina 4-inch, Android Emulator, Galaxy S4, etc

app:应用的绝对路径,注意一定是绝对路径。如果指定了appPackage和appActivity的话,这个属性是可以不设置的。另外这个属性和browserName属性是冲突的。

browserName:移动浏览器的名称。比如Safari' for iOS and 'Chrome', 'Chromium', or 'Browser' for Android;与app属性互斥。

udid:物理机的id。比如1ae203187fc012g。

下面这些属性是android平台特定的:

appActivity:待测试的app的Activity名字。比如MainActivity, Settings。注意,原生app的话要在activity前加个""。

appPackage:待测试的app的java package。比如comexampleandroidmyApp, comandroidsettings。

本文主要讨论android平台的appium测试方法和技巧,因此在这里就不列出ios设备特定的属性了。

更多信息请参考 官方文档

在这里我们发现,我们经常要获取app的package和activity名字,那么有什么工具可以让我们方便的获取到这些信息呢?下一节讲回答这个问题。

获取activity实例有两种办法:

1、通过context来获取,简单方便:

private String getRunningActivityName() {

String contextString = contexttoString();

return contextStringsubstring(contextStringlastIndexOf("") + 1, contextStringindexOf("@"));

}

2、通过特定权限获取

<uses-permission android:name="androidpermissionGET_TASKS" />

private String getRunningActivityName(){

ActivityManager activityManager=(ActivityManager) getSystemService(ContextACTIVITY_SERVICE);

String runningActivity=activityManagergetRunningTasks(1)get(0)topActivitygetClassName();

return runningActivity;

}

index是针对view来讲的,view包含在viewgroup中,而index就是viewgroup中view的排序号,比如viewgroup“androidwidgetLinearLayout”中包含有两个view“androidwidgetRadioGroup”和view“androidwidgetRadioButton”,而index是从0开始的,那viewgroup里就有0和1两个index,如果viewgroupgetChildAt(0)=view“androidwidgetRadioGroup”,viewgroupgetChildAt(1)=view“androidwidgetRadioButton”,那view“androidwidgetRadioGroup”的index就是0,而view“androidwidgetRadioButton”的index就是1

如果你只想获取index那使用41以上sdk中tools里自带的uiAutomatorviewer就可以获取到

做App压力测试、自动化测试等时,前提是要准备好包名和activity,那么如何获取呢?

0、找开发要  (最快捷 (๑•̀ㅂ•́)و✧)

1、需要先打开apk后,再敲入命令

            adb shell dumpsys window w |findstr \/ |findstr name=  

            //(查看所有包名:adb shell pm list packages [-f])  

2、uiautomation

3、testin云

41、反编译,比如apktool,打开AndroidManifestxml即可

42  反编译2

       adb install d:\xxxxapk

        aapt dump badging  d:\xxxxapk  然后打印出第一行就包含包名

5、通过adb shell进入到手机data/data目录下,查看包名(需要root)

        adb shell

        cd data/data

        ls

6、通过使用adb shell的dumpsys的另一个命令,查看包名(不需要root)

        adb shell dumpsys activity> c:\logtxt#需要先打开apk后,再敲入命令

        输入命令之后,cmd里没有任何提示,不过C盘目录下,会多一个logtxt文件。

        打开logtxt文件,搜索 Stack #1,然后寻找cmp=

7、通过使用grep,查看包名(不需要root)

        adb shell1|shell@RM-1057:/ $logcat | grep START#需要先打开apk后,再敲入命令

        查看最下面

        接下来,不论打开哪个APK,cmd命令会自动显示出包名和activity的名字,比如我又打开了相册~

        可以看出相册的包名是comandroidgallery3d,activity名字是appGallery

       1  adb shell dumpsys activity|findstr Focuse

       2  adb shell dumpsys activity top

       3  uiautomation

1 通过RunningTaskInfo的topActivity获取当前Activity实例。通过该种方式获取的Activity,只能保证其已经执行了ActivityonCreate方法,不能保证是否执行了ActivityonResume方法。该方法在api 21以后已经被禁,使用需谨慎。

2 通过Android 40之后提供的ActivityLifecycleCallbacks接口监听当前的Activity实例,可以在onActivityCreated或者onActivityResumed当中获取到。建议在onActivityResumed当中去获取,同时最好以软引用或者弱引用的方式持有,防止OOM。(其中XxxApplication是你的工程Application)

3 手写Activity管理栈,可以使用Stack或者List等存储已经执行了ActivityonCreate或者ActivityonResume方法的Activity,并相应在ActivityonPause或者ActivityonDestroy中移除。

4 反射方式

以上就是关于Desired Capabilities详解全部的内容,包括:Desired Capabilities详解、android 如何获取手机当前的Activity实例、robotium 怎么获取第三方activity呢 比如 微信等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/9762456.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-01
下一篇2023-05-01

发表评论

登录后才能评论

评论列表(0条)

    保存