Appium移动端自动化测试指南

2021-05-25
halley.fang

appium 主要用于移动端自动化测试,支持 iOSAndroidWeb AppNative AppHybrid App 的自动化测试。

appium 原理

Appium 分成三大部分,分别是 Appium Client、Appium Server 和设备端
Appium
Figure 1. appium结构

Appium Server 有 Mac 和 Windows 版本,也就是说 Appium Server 可以运行在 Mac 或者 Windows 电脑上。本质上,Appium Server 是一个 Node.js 应用,接受来自 Appium Client 的请求,解析后通过 WebDriver 协议和设备端上的代理打交道。

  • 如果是 iOS,Appium Server 会把操作请求发送给 WebDriverAgent(简称 WDA),然后 WDA 再基于 XCUITest 完成 iOS 模拟器或者真机上的自动化操作;

  • 如果是 Android,Appium Server 会把操作请求发送给 appium-UIautomator2-server,然后 appium-UIautomator2-server 再基于 UIAutomator V2 完成 Android 模拟器或者真机上的自动化操作。
    Appium Client 其实就是测试代码,使用对应语言的 Client 将基于 JSON Wire 协议的操作指令发给 Appium Server。

整体来说,Appium 的内部原理可以总结为:Appium 属于 C/S 架构,Appium Client 通过多语言支持的第三方库向 Appium Server 发起请求,基于 Node.js 的 Appium Server 会接受 Appium Client 发来的请求,接着和 iOS 或者 Android 平台上的代理工具打交道,代理工具在运行过程中不断接收请求,并根据 WebDriver 协议解析出要执行的操作,最后调用 iOS 或者 Android 平台上的原生测试框架完成测试。

常用操作

adb常用命令(windows)

#adb停止
adb kill-server
#adb启动
adb start-server
#设备查看
adb devices
#连接设备
adb connect {ip}:{port}
#断开连接
adb disconnect {ip}:{port}
#设置手机分辨率
adb shell wm size 2340x1080
#恢复分辨率
adb shell wm size reset
#设置屏幕显示范围 可通过此命令隐藏导航栏,底部白边等,参数自调
adb shell wm overscan 0,0,0,-3
#还原屏幕显示范围
adb shell wm overscan reset
#隐藏导航栏(全局)
adb shell settings put global policy_control immersive.navigation=*
#隐藏导航栏(指定应用)
adb shell settings put global policy_control immersive.navigation={packageName}
#隐藏状态栏(全局)
adb shell settings put global policy_control immersive.status=*
#隐藏状态栏(指定应用)
adb shell settings put global policy_control immersive.status={packageName}
#重置隐藏状态栏/导航栏(恢复)
adb shell settings put global policy_control null
#列出已安装应用包名
adb shell pm list packages
#安装apk文件
adb install {absolutePath}
#卸载软件
adb uninstall {packageName}
#强行停止软件
adb shell am force-stop {packageName}
#重启设备
adb reboot
#获取包名(打开待测app)
adb shell dumpsys window | findstr mCurrent
adb shell dumpsys activity | findstr mFocusedActivity
#推送电脑文件到手机
adb push {local} {mobile}
#复制手机文件到电脑
adb pull {mobile} {local}
#查看手机IP地址
adb shell ifconfig | findstr Maski
#查看CPU信息
adb shell cat /proc/cpuinfo
#查看内存信息
adb shell cat /proc/meminfo
#关闭adb调试模式
adb shell settings put global adb_enabled 0
#获取日志
adb logcat
#启动时间
adb shell am start -w {packageName}

ios-deploy常用命令

#查看连接的设备(包括通过usb和wifi连接的)
ios-deploy -c
#查看通过usb连接的设备
ios-deploy -c --no-wifi
#安装应用到指定设备(其中xxx.app是Xcode编译后的ipa的路径)
ios-deploy --id [udid] --bundle [xxx.app]
#卸载指定设备上的应用(根据包名,也就是bundleId)
ios-deploy --id [udid] --uninstall_only --bundle_id [bundleId]
#查看指定设备上安装的所有应用(包括系统应用和第三方)
ios-deploy --id [udid] --list_bundle_id
#检查指定设备上是否安装了某个应用
ios-deploy --id [udid] --exists --bundle_id

Appium操作

app操作

  • 启动app driver.startActivity

  • 关闭 diver.close

  • 退出 diver.quite

  • 关闭APP和驱动 diver.closeapp

  • 置于后台

JavascriptExecutor jse = (JavascriptExecutor) driver;
Map<String, Object> params = new HashMap<>();
params.put("bundleId", "com.test");
final boolean wasRunningBefore = (Boolean)jse.executeScript("mobile: terminateApp", params);
  • 启动至于后台的app

JavascriptExecutor jse = (JavascriptExecutor) driver;
Map<String, Object> params = new HashMap<>();
params.put("bundleId", "com.test");
jse.executeScript("mobile: activateApp", params);
  • 获取元素位置和大小

element.location
element.size
  • 获取和设置手机网络

networkconnection
setNetworkconnection

触控操作TouchAction

  • 轻敲 tap

  • 按下 press

  • 抬起 release

  • 等待 wait

  • 长按 longpress

  • 移动 moveTo

多点触控MultiTouchAction

  • 手势 MultiTouchAction

模拟键盘输入

电话键
KEYCODE_CALL 拨号键 5
KEYCODE_ENDCALL 挂机键 6
KEYCODE_HOME 按键Home 3
KEYCODE_MENU 菜单键 82
KEYCODE_BACK 返回键 4
KEYCODE_SEARCH 搜索键 84
KEYCODE_CAMERA 拍照键 27
KEYCODE_FOCUS 拍照对焦键 80
KEYCODE_POWER 电源键 26
KEYCODE_NOTIFICATION 通知键 83
KEYCODE_MUTE 话筒静音键 91
KEYCODE_VOLUME_MUTE 扬声器静音键 164
KEYCODE_VOLUME_UP 音量增加键 24
KEYCODE_VOLUME_DOWN 音量减小键 25

控制键

KEYCODE_ENTER 回车键 66
KEYCODE_ESCAPE ESC键 111
KEYCODE_DPAD_CENTER 导航键 确定键 23
KEYCODE_DPAD_UP 导航键 向上 19
KEYCODE_DPAD_DOWN 导航键 向下 20
KEYCODE_DPAD_LEFT 导航键 向左 21
KEYCODE_DPAD_RIGHT 导航键 向右 22
KEYCODE_MOVE_HOME 光标移动到开始键 122
KEYCODE_MOVE_END 光标移动到末尾键 123
KEYCODE_PAGE_UP 向上翻页键 92
KEYCODE_PAGE_DOWN 向下翻页键 93
KEYCODE_DEL 退格键 67
KEYCODE_FORWARD_DEL 删除键 112
KEYCODE_INSERT 插入键 124
KEYCODE_TAB Tab键 61
KEYCODE_NUM_LOCK 小键盘锁 143
KEYCODE_CAPS_LOCK 大写锁定键 115
KEYCODE_BREAK Break/Pause键 121
KEYCODE_SCROLL_LOCK 滚动锁定键 116
KEYCODE_ZOOM_IN 放大键 168
KEYCODE_ZOOM_OUT 缩小键 169

组合键

KEYCODE_ALT_LEFT Alt+Left
KEYCODE_ALT_RIGHT Alt+Right
KEYCODE_CTRL_LEFT Control+Left
KEYCODE_CTRL_RIGHT Control+Right
KEYCODE_SHIFT_LEFT Shift+Left
KEYCODE_SHIFT_RIGHT Shift+Right

基本

KEYCODE_0 按键’0’ 7
KEYCODE_1 按键’1’ 8
KEYCODE_2 按键’2’ 9
KEYCODE_3 按键’3’ 10
KEYCODE_4 按键’4’ 11
KEYCODE_5 按键’5’ 12
KEYCODE_6 按键’6’ 13
KEYCODE_7 按键’7’ 14
KEYCODE_8 按键’8’ 15
KEYCODE_9 按键’9’ 16
KEYCODE_A 按键’A’ 29
KEYCODE_B 按键’B’ 30
KEYCODE_C 按键’C’ 31
KEYCODE_D 按键’D’ 32
KEYCODE_E 按键’E’ 33
KEYCODE_F 按键’F’ 34
KEYCODE_G 按键’G’ 35
KEYCODE_H 按键’H’ 36
KEYCODE_I 按键’I’ 37
KEYCODE_J 按键’J’ 38
KEYCODE_K 按键’K’ 39
KEYCODE_L 按键’L’ 40
KEYCODE_M 按键’M’ 41
KEYCODE_N 按键’N’ 42
KEYCODE_O 按键’O’ 43
KEYCODE_P 按键’P’ 44
KEYCODE_Q 按键’Q’ 45
KEYCODE_R 按键’R’ 46
KEYCODE_S 按键’S’ 47
KEYCODE_T 按键’T’ 48
KEYCODE_U 按键’U’ 49
KEYCODE_V 按键’V’ 50
KEYCODE_W 按键’W’ 51
KEYCODE_X 按键’X’ 52
KEYCODE_Y 按键’Y’ 53
KEYCODE_Z 按键’Z’ 54

参考链接


Similar Posts

下一篇 Testng源码阅读

Comments

Table of contents