目录三、UiAutomator框架四、遇到的坑一、往期回顾

前3篇文章给你们讲解了Appium环境安装,Appium理念以及实现方法(四大点),第一个app手动化脚本。

日志中很清楚的告诉了每一步该干哪些,我做了哪些,是怎样来做这件事情的,中间我用到了哪些(aapt、adb等)。

日志中可以见到:打开应用后,假如没有后续的操作,它会主动关掉当前的会话。不像Web手动化要你自己关它就会关。一分钟之内没有向它发送任何命令,它都会觉得你不再须要和我通讯了,结束本次会话。

二、了解adb命令

这个难度也不大,把握常用的adb命令就可以了。要用adb命令要保证模拟器或则真机有一个是能让笔记本辨识的。

模拟器本身是root权限的,真机须要开启usb调试模式(不同的手机设置这儿会有差别,可自行百度)。

adb是安卓才有的,ios没有。

1.adb的使用和配置目标

1、掌握adb安装配置的方法。2、掌握adb使用技巧及常见命令。

1.1何为adb?

adb(AndroidDebugBridge)是androidsdk的一个工具,是个调试工具。

adb是拿来联接安卓手机和PC端的桥梁,要有adb作为两者之间的维系,能够让用户在笔记本上对手机进行全面的操作。其实,usb线作为中间工具。

Android的本意是用adb这样的一个工具来协助开发人员在开发android应用的过程中更快更好的调试apk,因而adb具有安装卸载apk、拷贝推送文件、查看设备硬件信息、查看应用程序占用资源、在设备执行shell命令等功能

1.2adb组成

「客户端client:」运行在你的笔记本上,你可以通过shell来调用起一个顾客端。其他Android工具比如ADT插件、DDMS都可以创建出一个顾客端。

「服务器server:」运行在你笔记本的后台,负责管理client和daemon进行通讯。

「守护进程daemon:」运行在模拟器或则Android设备的后台。

「验证:」打开windows命令行,输入adb命令。

1.3真机

真实的Android设备(手机/平板笔记本):

1.4adb常见命令

1.5手机路径如何来看呢?

安卓手机内核是Linux系统,须要晓得Linux系统中的常用操作,以及Linux系统中的基本知识。

需把握Linux系统中的常用命令、文件夹的权限、路径抒发、解压、基本的环境布署、tomcat、搭建数据库。

假如想在手机上找到一个手机路径,就必须晓得它在内部的文件储存。手机文件管理里有好多文件夹,每一层是做哪些的linux view命令详解,显示路径。首先步入手机内部系统环境,也就是Linux。用adbshell。

这样就早已步入到另外一个环境了。这个时侯早已步入手机内部的一个系统中去了。不同的模拟器进来,上面的名子是不太一样的。既然是root过来了,进来就是root权限。

假如是真机,没有这些root的话,那就是帐号进来的用户都是普通用户。是有权限能够控制的,不是所有的数据文件你都具备权限去访问的。所以须要了解Linux系统中对权限的设置与控制,更改用户权限。

Linux中的单斜杠是最开始的根目录,所有的文件都放到这个目录下边。通过ls-l可以看见下边有比较多的文件:

倘若不是root帐号,是普通帐号通常进来的是当前的用户目录。

sdcard(储存空间)在Linux系统中就是一个文件夹来抒发。

cdsdcard基本上你的用户数据就会储存在这个目录下。

adbpull不能在shell命令下进行的。输入exit。

adbpull/sdcard/shumei.txtD:xiazai

所以先确认手机上的路径,从手机上拉取文件要晓得自己的文件在哪。

「命令:」

adbpushC:Users18210Pictureslink.jpg/sdcard/

cdsdcard

ls-l

adblogcat有点像个服务,会刷一堆下来,假如要看完整的日志linux 论坛,直接看肯定是不便捷看的。须要把它输出到本地。

先ctrl+c退出。

Linux上将内容输出到本地文件是用>英文名称作“重定向”。

adblogcat>D:xiazaiadb_logcat.txt

>>双箭头是会追加不会覆盖,>单箭头是你上次再去输入的时侯就直接把原先的覆盖了。

按ctrl+c将日志停止输出后就可以看见:

之所以输出日志是便捷定位问题的,假如你看不懂日志里的错误提示,你可以将下载出来的日志发给开发。

2.假如如今同时有2个设备呢,如何指定安装到那个设备上?

加上-s具体可以百度。

adbinstallxxx.apk为了获取apk的安装包所在地址,可以直接把apk拖到cmd的窗口获取,返回success就说明安装成功了!

adbuninstallcom.tencent.mobileqq应用包名(注意:不是应用名称)包名可以adbshellpmlistpackages-3获取用户包名。

adbshelldumpsysactivity|find”mFocusedActivity”查看前台应用activity名(安卓8.0以下用这个命令)

(找当前前台正在活动的activity,「也就是当前肉眼看到的这个应用的界面」)每一个界面都有一个activity的名子。

可以获取到当前正在活动的包名以及activity名称。

但不代表就是入口页面的名称,入口是你启动App的时侯步入的activity。

步入一个app以后可能默认在欢迎页面,把欢迎页面处理完成后就步入了首页。首页处理完成以后,就再步入别的页面。

3.Android8.0adbshelldumpsysactivityactivities|findstrmFocusedActivity获取当前的activity显示空的靠谱链接:

安卓8.0以下用命令adbshelldumpsysactivityactivities|findstrmFocusedActivity

安卓8.0以上用命令adbshelldumpsysactivityactivities|findstrmResumedActivity

做手动化的时侯,有的时侯须要通过activity的名称来判定当前是否在这个页面当中。所以须要用这条命令得到对应的名子讲到用例当中。

adbconnect/disconnect通过wifi进行远程联接手机进行调试(前提是adb须要设置一下对应的端口以后,再去通过wifi联接)

adbkill-server中止adb服务

adbstart-server启动adb服务。一般在adb碰到问题时,与adbkill-server一起使用。

adbshellpmlistpackages列举所有包名

-f列举所有apk路径及包名-s列举系统apk路径及包名-3列举用户apk路径及包名

adbshellpmlistpackages-3

App手动化在安卓版本6以上就是用的uiautomator2作为驱动。所以它会把服务装到手机上。之后开启uiautomator2对应的Bootstrap步入窃听状态,与我们的Appium进行通讯。

目录结构:

adbshell步入linux命令行模式。

system分区data分区sdcard分区

4.logcat日志文件

Android日志系统提供了记录和查看系统调试信息的功能,日志都是从各类软件和一些系统的缓冲区中记录出来的,缓冲区可以通过logcat命令来查看和使用。

4.1使用方法

[adb]logcat[]…[]..

4.2logcat是以如下开头的:

开发者选项,有个选项称作“日志记录器缓冲区大小”,默认是256K,日志是循环写入环型缓冲区的。在一般情况下,写满时最旧的日志会被删掉以给新输出的日志留显存空间。

5.logcat缓冲区

Androidlog输出量巨大,非常是通讯系统的log,为此,Android把log输出到不同的缓冲区,目前定义了四个log缓冲区:

如想输出通讯系统的log:adblogcat-bradio

6.logcat日志文件剖析

输出的日志格式如下所示:

6.1由六五部份组成:写下日志时的时间linux系统好用吗,如上中01-1109:39:35.209。优先级,在Android中,日志的优先级从低到高分以下几种:标签(tag),注明日志发起者和便捷日志的过滤筛选,如上中ActivityManager。PID(进程ID),如上中491。正文,本日志的主体内容。7.logcat过滤器

logcat中信息太多,为了减轻不想要日志的输出,可以构建一个过滤器,过滤句型:

三、UiAutomator框架

UI手动化测试框架,安卓联通端app。

要求:Android4.3以上。

1.UIAutomator框架的主要特征

1、元素定位:UIAutomatorViewer.扫描、分析待测应用的UI组件的图象工具。2、元素操作:Accessingdevicestate.在目标设备和app上的各类操作。3、元素辨识:UIAutomatorAPIs.在多个应用程序中捕获和操作UI组件。

「官方文档:」

#ui-automator-viewer

UiAutomator框架是Java实现的,所以作为Python的学习者了解它的内部实现就好了。须要把握Java的类和对象、语法,自己写Java版本的测试用例能够用它。

用这个框架可以实现安卓App的手动化测试。它也有个元素定位的工具:

UIAutomatorViewer

这个工具是给App截图的。

UIAutomatorViewer对一个App的首页进行定位就必须先进行截图。一个外部的工具想对模拟器或则真机上一个APP的页面进行截图须要权限。

所以UIAutomatorViewer才能在App上进行截图成功的前提是adbdevices命令才能辨识到这个设备,有权限起来操作才可以。

这个工具打开后是空白的。

假如提示远端设备不存在linux view命令详解,可能是设备被他人占用了(运行Appium代码的同时打开了UIAutomatorViewer进行截图),等到Appiumserver上将当前会话关掉了,退出了这个App。保证截图的时侯这个设备没有被任何其他东西占用才会正常使用。

UIAutomator只能辨识安卓原控件,图中源码都是它的控件。不能辨识Web网页,所以看不到html的元素抒发、标签对这样的东西。

那么多箭头还有那么多0、1,见到了FrameLayout、LinearLayout,这个东西就称作「布局」。这儿属于开发知识,假若不懂布局也不影响做元素定位和做手动化测试。

布局就是规划上面如此多的元素,竖着放叠着放,还是置于框里。所以就是各类布局追加。

「布局上面能看见的就是它的元素。」

比如:控件的名子称作TextView(视图)。

页面中每一个元素都有元素类型、属性。UIAutomatorViewer截图中的属性都是有的,值不一定有。text在Web手动化中是文本内容不称作属性,并且在App中它也是属性。

「值是空的就证明当前这个属性(元素)是没有文本内容的。通常文本元素是有文本内容的。做App元素定位的时侯可以通过文本内容来定位。」

四、遇到的坑1.遇见报错啥的,要学会找关键的信息,百度报错日志。诸如这个报错:

就可以正常使用了。

2.为何设置path?

例如在cmd中输入adb,它从大家配置的系统环境变量目录下边去找,所以配置环境变量就配置到目录级别就可以了。

3.UIAutomatorViewer报错

UnexpectederrorwhileobtainingUIhierarchyjava.lang.reflect.InvocationTargetException

「原因是ANDROID8以上SDK的兼容性问题。」

解决方式,靠谱链接:

首先得在D盘新建一个app.uix和app.png,再运行如下命令:

adbshelluiautomatordump/sdcard/app.uix

adbpull/sdcard/app.uixD:/app.uix

adbshellscreencap-p/sdcard/app.png

adbpull/sdcard/app.pngD:/app.png

4.安卓sdk的坑

我安装安卓sdk,之前用镜像仍然没问题,明天死活不行,应当是镜像不能用了。

虽然也可以直接下载,关键啊我没搞懂报错(就是下载包哪里一堆x,之后还有英语报错Google啥的具体没搞懂,图也忘了截图了,这个和镜像没关系,镜像的报错是在log里,这儿不是,就是不能下载)。

仍然以为它提示我要用镜像,百度下来也只有这些情况,之后呢,这个报错当然是告诉我每位包种类都要点击接受证书,之后点击install就可以正常下载啦。

之前文章中环境变量那样配置没有错。

「注意:之后下载啥先不配置镜像,直接下载试试能不能成功。」

安卓sdk包没下载全的情况下配置环境变量也没用的。所以不要以为自己的环境变量配错了,可能是包没下载全。

Author

这篇优质的内容由TA贡献而来

刘遄

《Linux就该这么学》书籍作者,RHCA认证架构师,教育学(计算机专业硕士)。

发表回复