• 参数设置
    • 初始化参数
      • 入参示例
      • 常见的参数
      • App 相关参数
      • Android 的参数介绍
      • iOS 的参数介绍
      • Electron 的参数介绍
      • Puppeteer 的参数介绍
  • Keycode 支持
    • 按键映射
    • Android 按键扩展映射
    • iOS 按键映射
  • 选择器说明 Locator
  • 手势操作
    • 连续操作

    参数设置

    初始化参数

    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