参数设置

初始化参数

Desired Capabilities 是用来在启动时配置服务器的参数。

入参示例

  1. const wd = require('macaca-wd');
  2. const driver = wd.promiseChainRemote({
  3. host: 'localhost',
  4. port: 3456
  5. });
  6. const desiredCaps = {
  7. platformName: 'ios',
  8. deviceName: 'iPhone 6s',
  9. app: 'path/to/app'
  10. }
  11. driver.init(desiredCaps);

常见的参数

类型 描述
platformName String 当前用例运行的平台 { iOS / Android / Desktop }
browserName String 当前测试的浏览器名称 { iOS: Safari } { Android: Chrome } { Desktop: Chrome / Electron }

App 相关参数

类型 描述
reuse Number 0: 启动并安装 app。1 (默认): 卸载并重装 app。 2: 仅重装 app。3: 在测试结束后保持 app 状态。
deviceName String 模拟器的名称,例如 ‘iPhone 6’ 或者 ‘Nexus 5x’。
app Stirng .ipa,.app 或者 .apk 文件的绝对地址或者远程地址,或者是包含上述文件格式的 Zip 文件。
udid String 测试设备的唯一设备 ID。
autoAcceptAlerts Boolean 自动接受所有的系统弹窗信息。默认是 false。
autoDismissAlerts Boolean 自动拒绝所有的系统弹窗信息。默认是 false。

Android 的参数介绍

类型 描述
package String Android app 的 package name。
activity String 启动时的 Activity name。
androidProcess String 使用 chromedriver 测试 webview 时需要的自定义的进程名。
isWaitActivity Boolean 是否等待传入 App 的 Acitivity 加载完成。 默认是 false。

iOS 的参数介绍

类型 描述
bundleId String 应用的 Bundle ID,例如 com.apple.Maps。

Electron 的参数介绍

类型 描述
uesrAgent String 自定义 UA
extraHeaders String 自定义头

Puppeteer 的参数介绍

类型 描述
uesrAgent String 自定义 UA

Keycode 支持

按键映射

PC 默认都支持
  • \uE002“HELP” => 259 (0x00000103)
  • \uE003“BACK_SPACE” => 67 (0x00000043)
  • \uE004“TAB” => 61 (0x0000003d)
  • \uE005“CLEAR” => 28 (0x0000001c)
  • \uE007“ENTER” => 66 (0x00000042)
  • \uE008“SHIFT” => 59 (0x0000003b)
  • \uE009“CONTROL” => 113 (0x00000071)
  • \uE00A“ALT” => 57 (0x00000039)
  • \uE00B“PAUSE” => 121 (0x00000079)
  • \uE00C“ESCAPE” => 111 (0x0000006f)
  • \uE00E“PAGE_UP” => 92 (0x0000005c)
  • \uE00F“PAGE_DOWN” => 93 (0x0000005d)
  • \uE010“END” => 123 (0x0000007b)
  • \uE011“HOME” => 122 (0x0000007a)
  • \uE012“ARROW_LEFT” => 21 (0x00000015)
  • \uE013“ARROW_UP” => 19 (0x00000013)
  • \uE014“ARROW_RIGHT” => 22 (0x00000016)
  • \uE015“ARROW_DOWN” => 20 (0x00000014)
  • \uE016“INSERT” => 124 (0x0000007c)
  • \uE017“DELETE” => 112 (0x00000070)
  • \uE031“F1” => 131 (0x00000083)
  • \uE032“F2” => 132 (0x00000084)
  • \uE033“F3” => 133 (0x00000085)
  • \uE034“F4” => 134 (0x00000086)
  • \uE035“F5” => 135 (0x00000087)
  • \uE036“F6” => 136 (0x00000088)
  • \uE037“F7” => 137 (0x00000089)
  • \uE038“F8” => 138 (0x0000008a)
  • \uE039“F9” => 139 (0x0000008b)
  • \uE03A“F10” => 140 (0x0000008c)
  • \uE03B“F11” => 141 (0x0000008d)
  • \uE03C“F12” => 142 (0x0000008e)
  • \uE03D“META” => 117 (0x00000075)

Android 按键扩展映射

Android 平台扩展的按键
  • \uE101 “POWER 电源键” => 26 (0x0000001a)
  • \uE102 “VOLUME_UP 音量加” => 24 (0x00000018)
  • \uE103 “VOLUME_DOWN 音量减” => 25 (0x00000019)
  • \uE104 “VOLUME_MUTE 禁音” => 164 (0x000000a4)
  • \uE105 “HOME_SCREEN HOME键” => 3 (0x00000003)
  • \uE106 “BACK BACK键” => 4 (0x00000004)
  • \uE107 “MENU MENU键” => 82 (0x00000052)
  • \uE108 “CAMERA 拍照键” => 27 (0x0000001b)
  • \uE109 “CALL 电话键” => 5 (0x00000005)
  • \uE10A “END_CALL 结束电话键” => 6 (0x00000006)
  • \uE10B “SEARCH 搜索键” => 84 (0x00000054)
  • \uE10C “DPAD_LEFT 导航左键” => 21 (0x00000015)
  • \uE10D “DPAD_UP 导航上键” => 19 (0x00000013)
  • \uE10E “DPAD_RIGHT 导航右键” => 22 (0x00000016)
  • \uE10F “DPAD_DOWN 导航下键” => 20 (0x00000014)
  • \uE110 “DPAD_CENTER 导航确定键” => 23 (0x00000017)
    android-reference-KeyEvent

iOS 按键映射

iOS 平台扩展的按键
  • \uE105 “HOME_SCREEN HOME键”

选择器说明 Locator

Locator iOS Android PC
name label or value content-desc or rawtext element name
xpath xpath xpath xpath
class name class/type class element node name
id accessibility Id resource Id element id
css native unsupport nativeunsupport element css

手势操作

Type Params Example Description
tap { x: 100, y: 100 } driver.touch(‘tap’, { x: 100, y: 100}) element.touch(‘tap’) 点击某个坐标或者当前元素
doubleTap { x: 100, y: 100 } driver.touch(‘doubleTap’, { x: 100, y: 100}) element.touch(‘doubleTap’) 双击某个坐标或者当前元素
press { x: 100, y: 100, duration: 2 (单位 S) } driver.touch(‘press’, { x: 100, y: 100}) element.touch(‘press’, { duration: 2 }) 长按某个坐标或者当前元素
pinch { x: 100, y: 100,scale: 2 (iOS), velocity: 1(iOS), direction: “in” or “out”(Android), percent: 200(Android), duration: 100(Android) } iOS: element.touch(‘pinch’, { scale: 2 }), Android: element.touch(‘pinch’, { direction: “in”, percent: 50 }) 两只手指放大或者缩小当前元素
rotate (iOS Only) { rotation: 6(弧度), velocity: 1 } element.touch(‘rotate’, { rotation: 6, velocity: 1 }) 旋转当前元素
drag { fromX: 100, fromY: 100, toX: 200, toY: 200, duration: 2(单位 S)} driver.touch(‘drag’, { fromX: 100, fromY: 100, toX: 200, toY: 200 }) element.touch(‘drag’, { toX: 200, toY: 200 }) 拖拽一个元素或者在多个坐标之间移动

连续操作

连续执行多个 touch 操作,类似于下图的密码解锁。

  1. driver.touch([{
  2. type: 'drag',
  3. fromX: 265,
  4. fromY: 860,
  5. toX: 825,
  6. toY: 860,
  7. steps: 200
  8. }, {
  9. type: 'drag',
  10. toX: 265,
  11. toY: 1460,
  12. duration: 3
  13. }, {
  14. type: 'drag',
  15. toX: 825,
  16. toY: 1460,
  17. duration: 3
  18. }]);

touch-gestures

参数设置 - 图2

原文: https://macacajs.github.io/zh/helpful-settings