目录三、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包没下载全的情况下配置环境变量也没用的。所以不要以为自己的环境变量配错了,可能是包没下载全。