appium学习(一)(环境配置,adb常用命令,appium介绍,appiumCapability介绍,appium-desktop使用)

 

环境依赖

  • Node.js
  • Appium
  • Appium-desktop
  • Appium-doctor
  • Appium-Python-Client
  • Python
  • JDK
  • Andriod SDK

安装Node.js

下载地址:https://nodejs.org/en/download/releases/

注意:Node.js版本要注意与Appium兼容,本套教程Appium版本是1.7.2,则选择的Node.js版本为6.11.3

安装完成后在按键Win+R输入cmd打开Windows 命令提示符,

输入如下命令:

 

C:\Users\Shuqing>node -v

v6.11.3

 

C:\Users\Shuqing>npm -v

3.10.10

说明:

  • npm(node package manage)是node.js安装包管理工具,类似Python中的pip工具。
  • 如果显示‘npm’不是内部命令提示,则可以管理员省份运行cmd,如果还是失败,则需要检查一下环境变量是否配置,或者重新安装nodejs。

 

 

Appium 安装

Appium Server其实可以通过命令 npm install -g appium来安装。不过由于众所周知的网络原因,直接使用这样安装会非常非常慢,甚至会安装失败,所以我们可以使用国内镜像来安装。

选用的镜像是 

镜像设置

npm install -g cnpm --registry=https://registry.npm.taobao.org

执行完成命令看到如下提示则表示设置完成

C:\Users\Shuqing> npm install -g cnpm --registry=https://registry.npm.taobao.org
npm WARN deprecated socks@1.1.10: If using 2.x branch, please upgrade to at least 2.1.6 to avoid a serious bug with socket data flow and an import issue introduced in 2.1.0
C:\Users\Shuqing\AppData\Roaming\npm\cnpm -> C:\Users\Shuqing\AppData\Roaming\npm\node_modules\cnpm\bin\cnpm
+ cnpm@5.2.0added 764 packages in 63.767s

 

appium 安装

使用如下命令来执行安装:

cnpm install -g appium

#安装指定版本
cnpm install appium@1.7.2 -g

看到如下命令时则表示下载安装完成。

All packages installed (565 packages installed from npm registry, used 57s, speed 835.67kB/s, json 477(6.16MB), tarball 40.58MB)
[appium@1.8.0] link C:\Users\Shuqing\AppData\Roaming\npm\appium@ -> C:\Users\Shuqing\AppData\Roaming\npm\node_modules\appium\build\lib\main.js

npm的包安装分为本地安装(local)、全局安装(global)两种,一般我们推荐使用全局安装。

C:\Users\Shuqing>where appium
C:\Users\Shuqing\AppData\Roaming\npm\appium
C:\Users\Shuqing\AppData\Roaming\npm\appium.cmd

appium运行

在控制台输入命令 appium即可启动appium服务,appium -v查看版本

C:\Users\Shuqing>appium -v
1.7.2

C:\Users\Shuqing>appium
[Appium] Welcome to Appium v1.7.2
[Appium] Appium REST http interface listener started on 0.0.0.0:4723

如果输入appium后显示:“appium不是内部或外部命令,也不是可运行的程序或批处理文件” 可以将appium安装的路径 如: “C:\Users\Shuqing\AppData\Roaming\npm”配置到系统环境变量Path中

退出appium

按键 ctrl+c 选择y 即可退出

 

 

安装Appium-desktop

下载地址:https://github.com/appium/appium-desktop/releases

上面提到的问题可以使用前面我们已经介绍了Appium Server来解决,Appium-desktop工具其实也封装了Appium server和Node.js依赖环境。

appium-desktop是我们初学者最容易上手的工具,后面课程首先会基于这个工具来讲解!然后再基于appium 命令来讲。

 

 

python环境安装配置

 

安装成功之后输入命令 python --version看到如下提示即可

C:\Users\Shuqing>python --version

Python 3.5.0

 

 

安装Appium-Python-Client

通过命令: pip install Appium-Python-Client 进行安装。 安装后可以通过如下命令来检测是否安装成功。

输入命令“from appium import webdriver” 回车,如果控制台没有报错,则说明安装成功。

C:\Users\Shuqing>python
Python 3.5.0 (v3.5.0:374f501f4567, Sep 13 2015, 02:27:37) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from appium import webdriver

说明:装Appium-Python-Client安装后的路径一般为:

{Python 安装路径}\Lib\site-packages\appium

JDK安装配置

jdk下载地址:

http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

jdk环境变量配置

http://jingyan.baidu.com/article/624e74599e8ad834e8ba5a94.html

安装配置完成后,打开命令提示符窗口,然后输入如下面命令有对应提示说明安装配置成  

C:\Users\Shuqing>java -version
java version "1.8.0_05"
Java(TM) SE Runtime Environment (build 1.8.0_05-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.5-b02, mixed mode)

    

Andriod sdk 安装

下载地址: http://tools.android-studio.org/index.php/sdk

安装 appium-doctor

appium-doctor可以检测Appium整体依赖环境配置情况。

C:\Users\Shuqing>cnpm install appium-doctor -g
  • 在控制台输入命令:appium-doctor 看到如下提示说明整体环境配置成功。

 

C:\Users\Shuqing>appium-doctor
info AppiumDoctor Appium Doctor v.1.4.3
info AppiumDoctor ### Diagnostic starting ###
info AppiumDoctor  ✔ The Node.js binary was found at: D:\program files\nodejs\node.exe
info AppiumDoctor  ✔ Node version is 6.11.3
info AppiumDoctor  ✔ ANDROID_HOME is set to: E:\Andriod_sdk
info AppiumDoctor  ✔ JAVA_HOME is set to: C:\Program Files\Java\jdk1.8.0_05
info AppiumDoctor  ✔ adb exists at: E:\Andriod_sdk\platform-tools\adb.exe
info AppiumDoctor  ✔ android exists at: E:\Andriod_sdk\tools\android.bat
info AppiumDoctor  ✔ emulator exists at: E:\Andriod_sdk\tools\emulator.exe
info AppiumDoctor  ✔ Bin directory of %JAVA_HOME% is set
info AppiumDoctor ### Diagnostic completed, no fix needed. ###
info AppiumDoctor
info AppiumDoctor Everything looks good, bye!
info AppiumDoctor

    

Android SDK

SDK:(software development kit)软件开发工具包。被软件开发工程师用于为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件的开发工具的集合。

 

下载安装

首先需要安装配置好jdk环境

首先,下载JDK安装包,到官网http://www.oracle.com/technetwork/java/javase/downloads/index.html进行下载,点左边的Java Platform (JDK) 7u51进入下一个下载页面

 

 点左边的Accept License Agreement,接受许可协议,方能下载,由于我装的WIN7 64位系统,所以选对应的64位安装包,

 

 Windows x64 对应的 jdk-7u51-windows-x64.exe 下载,

 

 下载完安装,本人习惯把软件装到D盘,各位可根据自己习惯改存放位置,

 

 安装好后便是配置JDK的环境变量,在桌面上计算机点右键选属性,或是开始菜单计算机上点右键选属性, 左边点高级系统设置,点下边的环境变量

 

 

 

 在新弹出窗口上,点系统变量区域下面的新建按钮,弹出新建窗口,变量名为JAVA_HOME,变量值填JDK安装的最终路径,我这里装的地址是D:\Program Files\Java\jdk1.7.0_51,所以填D:\Program Files\Java\jdk1.7.0_51,点确定完成,

 

 下面需要设置Path变量,由于系统本身已经存在这个变量,所以无需新建,在原本基本上添加JDK相关的,找到Path变量双击编辑,由于每个值之间用;符号间断,所以先在末尾加上;(注意是英文格式的,不要输其他符号空格等),加上;符号后在末尾加入%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin,点确定完成,

 

 

下面添加CLASSPATH变量,由于不存在,所以新建一个,变量名CLASSPATH,变量值%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar,首尾不带空格的,点确定完成,至此环境变量配置完成,点确定关掉环境变量配置窗口。

 

 

 上面步骤完成后,下面验证下是否配置成功,点开始运行输入cmd打开命令行窗口,输入java -version,显示版本1.7.0_51,输入javac -version,也显示1.7.0_51,说明JDK安装及环境变量配置成功。

 

 

C:\Users\Shuqing>java -version
java version "1.8.0_05"
Java(TM) SE Runtime Environment (build 1.8.0_05-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.5-b02, mixed mode)

 

Android SDK包下载

Tips: 点击视频左下方获取素材,可以下载到对应的软件:Andriod_sdk.exe。

下载对应的安装包后,点击安装即可。

安装后启动 SDK Manager.exe 程序就可以看到Android SDK Mannerger的主界面。

 

 

 

 

Tools目录:

 

 

 

Android SDK Tools(必须,只需下载一个版本,一般选最新版本):基础工具包,版本号带rc字样的是预览版。

Android SDK Platform-tools(必须,只需下载一个版本,一般选最新版本):从android2.3开始划出此目录,存放公用开发工具,比如adb、sqlite3等,被划分到了这里。

Android SDK Build-tools(必须,可以安装多个版本):Android项目构建工具。

Android xxx(API xx) 目录(可选的各平台开发工具):

 

 

 

  • Documentation for AndroidSdk(可选):安卓开发者官网的一些离线文档,不过下载下来打开也很慢,后面会提供另外一个离线版。
  • SDK Platform(必须):对应平台的开发工具,需要在哪个版本的平台下开发就下载哪个。
  • Samples for SDK(可选,此项在高版本tools中已不提供,需要在IDE里通过Import Sample引入,当然也可以下载离线版):内置的安卓示例程序,推荐安装。
  • Sources for Android SDK(可选):安卓API的源代码,推荐安装。
  • ARM /Intel xxxx Image(可选):各个以Image结尾的东西是支持相应平台的模拟器,我们就把它想象成一个刷机包吧。(使用真机调试或使用其它模拟器的话不需要安装)

Extras目录(可选的扩展):

 

 

  • Android Support Repository(可选):主要是方便在gradle中使用Android Support Libraries,因为Google并没有把这些库发布到maven center或者jcenter去,而是使用了Google自己的maven仓库。
  • Intel x86 Emulator Accelerator(HAXM installer)(可选):windows平台的Intel x86模拟器加速工具,配合Intel x86 atom/atom_64 System Image使用可加快模拟器的运行速度。

Android SDK文件目录

 

 

add-ons

这里面保存着附加库,第三方公司为android 平台开发的附加功能系统。比如GoogleMaps,当然你如果安装了OphoneSDK,这里也会有一些类库在里面。

docs

这里面是Android SDKAPI参考文档,所有的API都可以在这里查到。

extras

该文件夹下存放了Android support v4,v7,v13,v17包; 还有google提供额USB驱动、Intel提供的硬件加速等附加工具包, 和market_licensing作为AndroidMarket版权保护组件,一般发布付费应用到电子市场可以用它来反盗版。

platforms

是每个平台的SDK真正的文件,存放了不同版本的android系统。里面会根据APILevel划分的SDK版本。

samples

Android SDK自带的默认示例工程,里面的apidemos强烈推荐初学者运行学 习,对于SQLite数据库操作可以查看NotePad这个例子,对于游戏开发Snake、LunarLander都是不错的例子,对于Android主 题开发Home则是androidm5时代的主题设计原理。

环境变量设置

  • 系统变量里面添加变量名 ANDROID_HOME 路径为实际存放SDk的路径

 

 

  • 其他几个路径配置到系统环境Path中如下图所示:

配置检测

cmd界面输入“adb” 和"appt"来判断安装是否成功。

adb命令

C:\Users\Shuqing>adb
Android Debug Bridge version 1.0.39
Revision 3db08f2c6889-android
Installed as E:\Andriod_sdk\platform-tools\adb.exe
global options:
 -a         listen on all network interfaces, not just localhost
 -d         use USB device (error if multiple devices connected)
 -e         use TCP/IP device (error if multiple TCP/IP devices available)
 -s SERIAL
     use device with given serial number (overrides $ANDROID_SERIAL)
 -p PRODUCT
     name or path ('angler'/'out/target/product/angler');
     default $ANDROID_PRODUCT_OUT
 -H         name of adb server host [default=localhost]
 -P         port of adb server [default=5037]
 -L SOCKET  listen on given socket for adb server [default=tcp:localhost:5037]

aapt命令

C:\Users\Shuqing>aapt
Android Asset Packaging Tool

Usage:
 aapt l[ist] [-v] [-a] file.{zip,jar,apk}
   List contents of Zip-compatible archive.

 aapt d[ump] [--values] [--include-meta-data] WHAT file.{apk} [asset [asset ...]]
   strings          Print the contents of the resource table string pool in the APK.
   badging          Print the label and icon for the app declared in APK.
   permissions      Print the permissions from the APK.
   resources        Print the resource table from the APK.
   configurations   Print the configurations in the APK.
   xmltree          Print the compiled xmls in the given assets.
   xmlstrings       Print the strings of the given compiled xml assets.

 

UIAutomator

 Android 4.3发布的时候包含了一种新的测试工具–uiautomator,uiautomator是用来做UI测试的。也就是普通的手工测试,点击每个控件元素 看看输出的结果是否符合预期。比如 登陆界面 分别输入正确和错误的用户名密码然后点击登陆按钮看看是否能否登陆以及是否有错误提示等。

 

Android SDK在4.3中提供了如下工具来支持UI自动化测试:

  • uiautomatorviewer – 一个图形界面工具来扫描和分析应用的UI控件。存放在tools目录
  • uiautomator – 一个测试的Java库,包含了创建UI测试的各种API和执行自动化测试的引擎。

要使用该工具,需要满足如下条件:

  • Android SDK Tools, Revision 21 or higher
    • Android SDK Platform, API 18 or higher

使用方法

  1. 开启真机(或模拟器)的USB调式模式后连接电脑
  2. 打开设备上的App界面
  3. 启动UI Automatorviewer
  4. 获取对应页面的元素(多设备连接时要选择需要获取元素的设备)

 

 

注意事项

报错1

Error while parsing UI hierarchy XML file: Invalid ui automator hierarchy file.

一般Andriod 4.X系统会容易出现,换5.X及以上的系统OK

报错2

java.lang.ArrayIndexOutOfBoundsException

【解答】一般是设备息屏,导致页面没有元素显示,获取时数组地址越界报错,激活设备重启UI Auto即可

  • 演示获取真机模拟器的界面
  • 获取报错的笔记

报错3

Error while obtaining UI hierarchy XML file: com.android.ddmlib.SyncException: Remote object doesn't exist!
 
 

这个错的原因是因为没有dump下来界面的信息保存到uidump.xml文件中,而该文件保存在/data/local/tmp下,如果没生成该文件,uiautomatorviewer就会报这个错。

解决方案为:重启设备或者重新连接

 

 

adb命令

Android 调试桥

adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试应用。

Tips: 在 android_sdk/platform-tools/ 中找到 adb 工具,然后根据其具体的路径配置好环境变量。然后启动cmd 输入‘adb’即可查看是否配置成功。

 

adb 的工作原理

启动一个 adb 客户端时,此客户端首先检查是否有已运行的 adb 服务器进程。如果没有,它将启动服务器进程。当服务器启动时,它与本地 TCP 端口 5037 绑定,并侦听从 adb 客户端发送的命令—所有 adb 客户端均使用端口 5037 与 adb 服务器通信。

启用 adb 调试

要在通过 USB 连接的设备上使用 adb,您必须在设备系统设置中启用 USB debugging(位于 Developer options 下)。

在运行 Android 4.2 及更高版本的设备上,Developer options 屏幕默认情况下处于隐藏状态。如需将其显示出来,请转到 Settings > About phone 并点按 Build number 七次。返回上一屏幕,在底部可以找到 Developer options。

adb常用命令

查看adb版本
adb  version
连接夜神模拟器(此处分别演示模拟器和真机连接)
adb connect 127.0.0.1:62001

夜神模拟器的端口是规律的,第一个模拟器端口是62001,第二个模拟器端口是62025,第三个是62025+1,依此类推。

  • 模拟器1:Android 4.4.2 地址:127.0.0.1:62001
  • 模拟器2: Andriod 5.1.1 地址:127.0.0.1:62025

一、如何找到adb?

   安装夜神安卓模拟器后,电脑桌面会有“夜神模拟器”的启动图标,鼠标右键--打开文件所在的位置,就会进入***\Nox\bin,比如小编的路径是C:\Program Files (x86)\Nox\bin,然后可以在该路径下找到nox_adb.exe

 

二、如何连接设备?

   首先需要进入\Nox\bin路径的cmd窗口,如何进入?

   方式一:继续上述的步骤,进入\Nox\bin目录,然后按Shift键的同时,单击鼠标右键,就会看到“在此处打开命令窗口(W)”,点击即可进入\Nox\bin路径的cmd窗口。

   方式二:按Windows+R键,在弹出的“运行”窗口输入cmd,确定,然后输入cd C:\Program Files (x86)\Nox\bin(说明:这是你的夜神模拟器安装路径),即可。说明:如果你的夜神模拟器不是安装在C盘,比如安装在D盘,请在cd前面先输入D: 然后按回车键,再cd ...\Nox\bin。

 

        在连接设备之前,先查看一下在运行的设备:

        nox_adb.exe devices

       C:\Program Files (x86)\Nox\bin>nox_adb devices

       List of devices attached

       127.0.0.1:62001 device

   说明:nox_adb.exe 完全等同于nox_adb,也完全等同于adb,下同。比如adb devices。

        如果未启动夜神模拟器,就会得到如下信息:

       C:\Program Files (x86)\Nox\bin>adb devices

       List of devices attached

       (这一行是空的,需要我们先把夜神模拟器启动一下)

        如果启动的模拟器不止一个,如果连接设备?

   比如小编多开了3个夜神模拟器,adb devices一下,会看到如下信息:

        C:\Program Files (x86)\Nox\bin>nox_adb devices

        List of devices attached

       127.0.0.1:62001 device

       127.0.0.1:62025 device

       127.0.0.1:62026 device

  (夜神模拟器的端口是规律的,第一个模拟器端口是62001,第二个模拟器端口是62025,第三个是62025+1,以此类推)

   如果指定在62001 上安装一个apk,那么请输入:adb -s 127.0.0.1:62001 install D:\\QQ.apk

   温馨提示:adb -s 127.0.0.1:620** 可连接任意指定的设备,多开模拟器后想怎么连都可以,为方便教程,以下操作都是在单开模拟器下进行,如果多开需要,只需要在adb后面带上-s 127.0.0.1:620** 即可。

   

 

 三、常用adb操作

1、如何把电脑上的文件或文件夹传到模拟器里面?

adb push D:/sex.avi /mnt/avi/

 

adb push <local> <remote>
eg:
adb push C:\Users\Shuqing\Desktop\kyb.txt /sdcard
C:\Users\Shuqing\Desktop\kyb.txt: 1 file pushed. 0.1 MB/s (462 bytes in 0.005s)

  

 

2、如何把模拟器里面的文件或文件夹传到电脑上?

adb pull /mnt/avi/sex.avi D:/avi/

 

adb pull <remote> <local>
eg:
adb pull /sdcard/server.log  C:\Users\Shuqing\Desktop
/sdcard/server.log: 1 file pulled. 0.0 MB/s (196 bytes in 0.004s)

  

 

屏幕截图
$ adb shell screencap /sdcard/screen.png
adb pull /sdcard/screen.png  C:\Users\Shuqing\Desktop
adb服务启动和关闭
adb kill-server                        关闭adb服务
adb start-server                      开启adb服务

Tips:如果5037端口被占用可以使用如下命令释放端口

C:\Users\Shuqing> netstat -ano | findstr "5037"
  TCP    127.0.0.1:5037         0.0.0.0:0              LISTENING       11072
  TCP    127.0.0.1:5037         127.0.0.1:59519        TIME_WAIT       0

taskkill -f -pid XXX

  

  

 

 

3、安装APK

adb install d:\\qq.apk

 

adb install | -r <apkName>  -r 覆盖原安装文件 -s 可以指定设备
eg:

#默认安装
adb install "C:\Users\Shuqing\Desktop\Appium 自动化测试教程\wandoujia.apk"

#覆盖安装
adb install -r  "C:\Users\Shuqing\Desktop\Appium 自动化测试教程\wandoujia.apk"

#指定设备安装
adb  -s 127.0.0.1:62001 install  C:\Users\Shuqing\Desktop\Appium\kaoyan3.1.0.apk 自动化测试教程\wandoujia.apk"

  

 

4、卸载APK

adb uninstall 包名

比如卸载QQ:adb uninstall com.tencent.mobileqq

 

adb uninstall  | -k  <apkName>  卸载软件

adb uninstall  com.wandoujia.phoenix2

  

 

5、PM包命令

1)获取模拟器所有包名

adb shell pm list packages

 

 

2)获取模拟器所有包名并且包括APK路径

adb shell pm list packages -f

 

 

3)获取包名对应的APK路径

adb shell pm path packageName

 

 

4)清理应用数据

adb shell pm clear packageName

 

 

6、启动应用

adb shell am start -n 包名/Activity类名

 

 

例子:启动应用宝:

adb shell am start -n com.tencent.android.qqdownloader/com.tencent.assistant.activity.SplashActivity

 

 

指定模拟器启动动应用宝:

adb -s 127.0.0.1:5555 shell am start -n com.tencent.android.qqdownloader/com.tencent.assistant.activity.SplashActivity

 

 

7、关闭应用

adb shell am force-stop 包名

 

 

8、模拟输入

adb shell input text 字符串(不支持中文)

 

 

9、模拟按键

adb shell input keyevent 键值

 

 

10、模拟鼠标点击

adb shell input tap X Y

 

 

11、模拟鼠标滑动

adb shell input swipe X1 Y1 X2 Y2

 

 

12、截屏

adb shell screencap -p /sdcard/screencap.png

 

 

13、设置手机IMEI/IMSI/手机号/SIM卡序列号

adb shell setprop persist.nox.modem.imei 352462010682470

adb shell setprop persist.nox.modem.imsi 460000000000000

adb shell setprop persist.nox.modem.phonumber 15605569000

adb shell setprop persist.nox.modem.serial 89860000000000000000

 

 

14、nox_adb shell进去然后执行下面的命令修改经纬度

setprop persist.nox.gps.latitude xxx

setprop persist.nox.gps.longitude xxx

 

15、修改mac地址

setprop persist.nox.wifimac xxx                  修改mac地址

 

setprop persist.nox.modem.phonumber 138111111111         手机号,生成一个随机11位数字

setprop persist.nox.model ABC001                  手机型号,英文加数字随机

setprop persist.nox.manufacturer XiaoMi               手机制造商英文随机

setprop persist.nox.brand Mi                    手机品牌英文随机

 

 

 

 

16、adb logcat

打印log信息

 

指令

说明

备注

adb logcat

打印log

/

adb logcat -c

清除手机的log buffer

有些手机权限控制, 不支持.

adb logcat -b <buffer>

打印指定buffer的log信息

buffer有: main(主log区,默认), events(事件相关的log), radio(射频, telephony相关的log)

adb logcat -v <format>

格式化输出log

常用的用adb logcat -v time显示时间

adb logcat -f <filename>

输出log到指定文件

 

 

17、adb start/kill-server

启动/杀死adb简介中提到的Server端进程。

由于adb并不稳定, 有时候莫名的问题掉线时, 可以先kill-server, 然后start-server来确保Server进程启动。往往可以解决问题。

 

 

18、adb shell am

am即activity manager.
该命令用来执行一些系统动作, 例如启动指定activity, 结束进程, 发送广播, 更改屏幕属性等. 调试利器.

指令

说明

备注

start <Intent>

根据intent指向启动Activity

Intent可以是显示的指向activity, 也可以是ACTION方式, 并且可以添加flag, data等参数信息.

startservice <Intent>

启动Service

可以添加flag, data等参数信息.

broadcast <Intent>

发送广播

可以添加flag, data等参数信息.

monitor

启动一个Crash和ANR的监听器

如有Crash或ANR会在控制台输出相关信息.

force-stop <Package>

强制停止该包相关的一切

传入package name.

kill <Package>

杀死该包相关的所有进程

传入package name.

kill-all

杀死所有后台进程

 

display-size WxH

改变显示的分辨率

例如adb shell am display-size 1280x720, 手机可能不支持.

display-density <dpi>

改变显示的density

例如adb shell am display-density 320, 手机可能不支持.


19、adb shell dumpsys

强大的dump工具, 可以输出很多系统信息. 例如window, activity, task/back stack信息, wifi信息等.

常用dumpsys:

指令

说明

备注

细分参数

activity

输出app组件相关信息

还可以用细分参数获得单项内容, 下同. 例如adb shell dumpsys activity activities来获取activity task/back stack信息.

activites, service, providers, intents, broadcasts, processes

alarm

输出当前系统的alarm信息

/

/

cpuinfo

输出当前的CPU使用情况

/

/

diskstats

输出当前的磁盘使用状态

/

/

batterystats

电池使用信息

/

/

package

package相关信息, 相当于pm功能的集合

输出诸如libs, features, packages等信息

/

meminfo

输出每个App的内存使用和系统内存状态

可以指定包名, 例如adb shell dumpsys meminfo com.anly.githubapp

/

window

输出当前窗口相关信息

/

policy, animator, tokens, windows

20.复制  -copy:<nox_id> _from:<nox_id>例:Nox.exe -copy:Nox_1 -from:nox
Nox_1是新增的模拟器,复制自nox

21.删除  -remove:<nox_id>
例:Nox.exe -remove:Nox_2
删除模拟器Nox_2

22.备份  -backup:<nox_id> -file:filepath
例:Nox.exe -backup:Nox_1 -file:C:\Users\xxxx\Desktop
备份Nox_1到桌面

23.还原  -restore:<nox_id> -file:filepath
例:Nox.exe -restore:Nox_1 -file:C:\xxxx\lihc\Desktop\backup20171030174008.vmdk
[C:\Users\xxxx\Desktop\backup20171030174008.vmdk]文件还原到Nox_1

  

Activity

Android中,activity是所有程序的根本,所有程序的流程都运行在activity之中,activity可以算是开发者遇到的最频繁,也是android当中最基本的模块之一。在android的程序中,activity一般代表手机屏幕的一屏。如果把手机比作一个浏览器,那么activity就相当于一个网页。在activity当中可以添加一些Button、Checkbox等控件,可以看到activity概念和网页的概念相当类似。

一般一个android应用是由多个activity组成的,这多个activity之间可以进行相互跳转。例如,按下一个Button按钮后,可能会跳转到其他的activity,与网页跳转稍微有点不一样的是,activity之间的跳转有可能返回值。

Tips:activity的生命周期:即“产生、运行、销毁”,但是这其中会调用许多方法onCreate(创建) 、onStart(激活) 、onResume(恢复) 、onPause(暂停) 、onStop(停止) 、onDestroy(销毁) 、onRestart(重启)。

 

Activity获取

研发提供

aapt

aapt即Android Asset Packaging Tool,在SDK的build-tools目录下。该工具可以查看,创建, 更新ZIP格式的文档附件(zip, jar, apk)。也可将资源文件编译成二进制文件。获取命令如下:

aapt dump badging xxxx.apk
aapt dump badging xxxx.apk | find "launchable-activity"

可以把appt配置到环境变量(系统变量中的Path),这样运行便捷一些,appt路径:\Andriod_SDK\build-tools{version}

Activity页面布局元素

FrameLayout

FrameLayout是最简单的布局了。所有放在布局里的控件,都按照层次堆叠在屏幕的左上角。后加进来的控件覆盖前面的控件。

LinearLayout

LinearLayout按照垂直或者水平的顺序依次排列子元素,每一个子元素都位于前一个元素之后。如果是垂直排列,那么将是一个N行单列的结构,每一行只会有一个元素,而不论这个元素的宽度为多少;如果是水平排列,那么将是一个单行N列的结构。如果搭建两行两列的结构,通常的方式是先垂直排列两个元素,每一个元素里再包含一个LinearLayout进行水平排列。

RelativeLayout

RelativeLayout相对布局允许子元素指定它们相对于其父元素或兄弟元素的位置,这是实际布局中最常用的布局方式之一。

AbsoluteLayout

AbsoluteLayout是绝对位置布局。在此布局中的子元素的android:layout_x和android:layout_y属性将生效,用于描述该子元素的坐标位置。屏幕左上角为坐标原点(0,0),第一个0代表横坐标,向右移动此值增大,第二个0代表纵坐标,向下移动,此值增大。在此布局中的子元素可以相互重叠。在实际开发中,通常不采用此布局格式,

TableLayout

TableLayout 为表格布局,适用于N行N列的布局格式。一个TableLayout由许多TableRow组成,一个TableRow就代表TableLayout中的一行。

TextView

通常用于显示文字用的。

ImageView

通常用于显示图片用的。

 

Appium简介

 

Appium是一个开源测试自动化框架,可用于原生,混合和移动Web应用程序测试。 它使用WebDriver协议驱动iOS,Android和Windows应用程序。

Appium优势

  • 可以跨平台同时支持android、ios
  • 支持多种语言,java、python、php、Ruby等等
  • 不用为复杂的环境发愁
  • 如果你有selenium经验,直接上手。

Appium自动化操作演示

纸上谈兵终觉浅绝知此事要躬行,详见视频教程演示

演示场景
  1. 自动安装考研帮App(kaoyan3.1.0.apk),然后启动App
  2. 检测是否有升级弹窗,如果有则点击取消按钮,
  3. 然后检测是否有引导页面,如果有则自动点击跳过按钮

Appium架构原理

Appium是在手机操作系统自带的测试框架基础上实现的,Android和iOS的系统上使用的工具分别如下:

  • Android(版本>4.3):UIAutomator,Android 4.3之后系统自带的UI自动化测试工具。
  • Android(版本≤4.3):Selendroid,基于Android Instrumentation框架实现的自动化测试工具。
  • ·iOS:UIAutomation(instruments框架里面的一个模板),iOS系统自带的UI自动化测试工具。

 

 

 

 

运行原理

我们的电脑(client)上运行自动化测试脚本,调用的是webdriver的接口,appium server接收到我们client上发送过来的命令后他会将这些命令转换为UIautomator认识的命令,然后由UIautomator来在设备上执行自动化。

Appium的架构原理如上图所示,由客户端(Appium Client)和服务器(Appium Server)两部分组成,客户端与服务器端通过JSON Wire Protocol进行通信。

Appium服务器

Appium服务器是Appium框架的核心。它是一个基于Node.js实现的HTTP服务器。Appium服务器的主要功能是接受从Appium客户端发起的连接,监听从客户端发送来的命令,将命令发送给bootstrap.jar(iOS手机为bootstrap.js)执行,并将命令的执行结果通过HTTP应答反馈给Appium客户端

Bootstrap.jar。

Bootstrap.jar是在Android手机上运行的一个应用程序,它在手机上扮演TCP服务器的角色。当Appium服务器需要运行命令时,Appium服务器会与Bootstrap.jar建立TCP通信,并把命令发送给Bootstrap.jar;Bootstrap.jar负责运行测试命令。

Appium客户端。

它主要是指实现了Appium功能的WebDriver协议的客户端Library,它负责与Appium服务器建立连接,并将测试脚本的指令发送到Appium服务器。现有的客户端Library有多种语言的实现,包括Ruby、Python、Java、JavaScript(Node.js)、Object C、PHP和C#。Appium的测试是在这些Library的基础上进行开发的。

Appium组件

Appium Server

Appium Server就是Appium的服务端——一个web接口服务,使用Node.js实现。引用官网解释说明。

Appium is a server written in Node.js. It can be built and installed from source or installed directly from NPM:

$ npm install -g appium
$ appium

Appium Desktop

Appium Desktop是一款适用于Mac,Windows和Linux的开源应用程序,它以美观而灵活的用户界面为您提供Appium自动化服务器的强大功能。 它是几个Appium相关工具的组合:

  1. Appium Server的图形界面。 您可以设置选项,启动/停止服务器,查看日志等...您也不需要使用Node 的NPM来安装Appium,因为Node运行时与Appium Desktop捆绑在一起。
  2. 您可以使用Inspector查看应用程序的元素,获取有关它们的基本信息,并与它们进行基本的交互。

 

 

 

 

注意

Appium Desktop与Appium不同。 Appium Desktop是Appium的图形前端,带有其他工具。 Appium Desktop以其自己的节奏发布,并拥有自己的版本控制系统。 就像国内很多定制的Android系统有自己版本号,但是都是基于一个Android系统版本封装的。版本号不一定与Andriod原生系统版本号一致。如:魅族的flyme6.0系统的内核是Android 5.1

Appium GUI

Appium GUI是Appium desktop的前身。 这个也是把Appium server封装成了一个图形界面,降低使用门槛,如同最初的操作系统Dos都是敲命令,后面都是图形界面操作系统,如Windows系统。很多初学者对下面这个界面应该不陌生吧,这个就是Windows版本的Appium GUI界面。测试人员可以手动启动,配置相关server 服务,如果不用这个启动的话,需要命令启动服务。因为大部分教程都是基于这个GUI来讲解的,所以很多人一说Appium就认为是这个。

该产品的Windows版本在2015年的AppiumForWindows_1_4_16_1.zip之后就停止更新了。目前版本可以使用,但是封装的不是最新的Appium版本,而是1.4.16版本。如果要使用最新的桌面版需要使用Appium Desktop

 

 

Appium Clients

因为Appium是一个C/S结构,有了服务端的肯定还有客户端,Appium Clients就是客户端,它会给服务端Appium Server发送请求会话来执行自动化任务。就像我们浏览器访问网页,浏览器是客户端,通过操作发送请求服务器来获取数据。我们可以使用不同的客户端浏览器(IE,Firefox,Chrome)访问一个网站。 Appium客户端可以使用不同的语言来实现,如Python,java等。具体详见下表:

 

 

Ruby

https://github.com/appium/ruby_lib

Python

https://github.com/appium/python-client

Java

https://github.com/appium/java-client

JavaScript (Node.js)

https://github.com/admc/wd

Objective C

https://github.com/appium/selenium-objective-c

PHP

https://github.com/appium/php-client

C# (.NET)

https://github.com/appium/appium-dotnet-driver

RobotFramework

https://github.com/jollychang/robotframework-appiumlibrary

Appium-desktop

Appium-desktop主界面包含三个菜单Simple,Advanced、Presets

Simple

host

设置Appium server的ip地址,本地调试可以将ip地址修改为127.0.0.1

port

设置端口号,默认是4723不用修改

start server

启动 Appium server

 

 

Advanced

高级参数配置修改,主要是一些Android和iOS设备,log路径等相关信息的配置。

 

 

 

 

presets

Advanced中的一些配置信息作为预设配置。

启动Appium

启动后控制台提示如下信息,表示Appium启动成功。

[Appium] Welcome to Appium v1.7.2
[Appium] Non-default server args:
[Appium]   address: 127.0.0.1
[Appium] Appium REST http interface listener started on 127.0.0.1:4723

 

 

什么是Capability

desired capability的功能是配置Appium会话。他们告诉Appium服务器您想要自动化的平台和应用程序。

Desired Capabilities是一组设置的键值对的集合,其中键对应设置的名称,而值对应设置的值。(如:"platformName": "Android")Desired Capabilities主要用于通知Appium服务器建立需要的Session。

Session

Appium的客户端和服务端之间进行通信都必须在一个Session的上下文中进行。客户端在发起通信的时候首先会发送一个叫作“Desired Capabilities”的JSON对象给服务器。服务器收到该数据后,会创建一个session并将session的ID返回到客户端。之后客户端可以用该session的ID发送后续的命令。

常用Capability配置讲解

Capability官方完整文档

http://appium.io/docs/cn/writing-running-appium/caps/#android

如果有了解过Capability的人会发现一个问题,其实他主要分成了三部分:公共部分、ios部分、android部分,如果你android想用ios的那是不可能的,so,老老实实去了解每个平台有哪些,他们的作用是什么。下面我们介绍一些公用常用的,红色标记的为常用的选项。

公用Capability

 

Android独有Capability

 

 

ios独有Capability

 

 

 

Capability启动App演示

New Session Window 会话建立
  • Automatic Server 本地AppiumServer服务
  • Custom Server:例如,如果要针对运行在网络中另一台计算机上的Appium服务器启动Inspector会话,这很有用。
  • Sauce Labs:如果您无法访问机器上的iOS模拟器,则可以利用Sauce Labs帐户在云中启动Appium会话。
  • TestObject:您还可以利用TestObject的真实设备云来进行真机测试。

headspin:使用远程设备来创建会话。  

 

desired capability参数Josin
{
  "platformName": "Android",
  "platformVersion": "5.1.1",
  "deviceName": "127.0.0.1:62025",
  "appPackage": "com.tal.kaoyan",
  "appActivity": "com.tal.kaoyan.ui.activity.SplashActivity",
  "noReset": true
}

 

 

 

新的会话窗口允许您构造一组desired capabilities,用于启动Appium会话。您可以针对当前运行的Appium Desktop服务器(默认的)启动一个会话,或者您可以针对各种其他端点启动一个会话。

因为不需要使用Appium Desktop自己的服务器,您可以在不启动Appium Desktop服务器的情况下进入新的会话窗口。只需点击“File”(Windows / Linux)或“Appium”(Mac),然后选择“New Session…”,它将打开新的会话窗口,而不必启动本地服务器。在这种情况下,将禁用附加到本地服务器。

Inspector元素获取

启动成功之后就可以使用 Inspector来进行元素空间获取了。 注意:默认的元素定位有一些不准,需要切换到第二个坐标点定位选项后再切换回来才能准确定 

 

 

posted @ 2020-11-19 17:08  自学随笔  阅读(678)  评论(0)    收藏  举报