返回市场
MCP-Appium服务器

MCP-Appium服务器

作者:arkhangelsk2 星标更新:2025-11-12

项目介绍

Appium WebdriverIO 测试自动化

该项目使用Appium和WebdriverIO对移动应用进行端到端(E2E)测试自动化,支持Android和iOS平台。

注意: 本项目使用由WebdriverIO提供的示例移动应用(wdiodemoapp)进行演示和测试。

项目结构

mcp-appium-server/
├── app/
│   ├── android/          # Android 应用文件
│   └── ios/              # iOS 应用文件(wdio.zip)
├── test/
│   ├── pageobjects/      # 页面对象模型文件
│   │   ├── forms.page.js # Android 表单屏幕
│   │   └── swipe.page.js # iOS 滑动屏幕
│   └── specs/            # 测试规范文件
│       ├── forms.e2e.test.js  # Android 表单 E2E 测试
│       └── swipe.e2e.test.js  # iOS 滑动 E2E 测试
├── wdio.conf.ts          # 基础 WebdriverIO 配置
├── wdio.android.conf.ts  # Android 特定配置
├── wdio.ios.conf.ts      # iOS 特定配置
└── package.json

先决条件

  • Node.js(v18或更高版本)
  • npm 或 yarn
  • 全局安装 Appium (npm install -g appium)
  • Android SDK(用于Android测试)
  • Xcode(用于iOS测试,仅限macOS)
  • 运行中的Android模拟器或iOS模拟器

安装

npm install

测试案例

Android - 表单 E2E 测试

文件: test/specs/forms.e2e.test.js

测试流程:

  1. 导航到表单标签页
  2. 在输入框中输入文本 "ABCDEF"
  3. 验证文本正确输入
  4. 将开关切换到ON状态
  5. 验证开关状态文本更改
  6. 从下拉菜单中选择 "Appium is awesome"
  7. 点击 "Active" 按钮
  8. 点击显示的弹出窗口中的OK按钮

运行命令:

npx wdio run wdio.android.conf.ts --spec test/specs/forms.e2e.test.js

预期结果: ✅ 通过(约12秒)

iOS - 滑动 E2E 测试

文件: test/specs/swipe.e2e.test.js

测试流程:

  1. 导航到滑动标签页
  2. 滑动浏览轮播图并提取所有6张卡片的描述
  3. 验证收集了所有6个描述
  4. 验证每张卡片中的特定内容

卡片描述:

  1. "WebdriverIO 是完全开源的,并可以在GitHub上找到"
  2. "WebdriverIO 拥有一个伟大的社区,支持所有成员。"
  3. "JS基金会托管跨越整个JavaScript生态系统的所有项目。"
  4. "围绕WebdriverIO的社区在各种用户组或会议上积极讨论关于使用WebdriverIO进行自动化测试的具体主题。"
  5. "添加辅助函数,或者更复杂的现有命令集和组合非常简单且非常有用。"
  6. "WebdriverIO 可以与JavaScript世界中的大多数TDD和BDD测试框架结合使用。"

运行命令:

npx wdio run wdio.ios.conf.ts --spec test/specs/swipe.e2e.test.js

预期结果: ✅ 通过(约10秒)

运行测试

运行所有测试

npx wdio run wdio.conf.ts

运行Android测试

npx wdio run wdio.android.conf.ts

运行iOS测试

npx wdio run wdio.ios.conf.ts

运行特定测试文件

npx wdio run wdio.android.conf.ts --spec test/specs/forms.e2e.test.js
npx wdio run wdio.ios.conf.ts --spec test/specs/swipe.e2e.test.js

配置

Android 配置(wdio.android.conf.ts

  • 平台:Android 12.1(API级别32)
  • 自动化:UIAutomator2
  • 应用:com.wdiodemoapp
  • 设备:Android 模拟器(sdk_gphone64_arm64)

iOS 配置(wdio.ios.conf.ts

  • 平台:iOS 18.6
  • 自动化:XCUITest
  • 应用:app/ios/wdio.zip
  • 设备:iPhone 16 模拟器
  • 会话超时时间:300秒(用于应用安装)

页面对象模型

本项目遵循页面对象模型(POM)设计模式,以提高可维护性和复用性。

表单页面(test/pageobjects/forms.page.js

  • 选择器: 表单标签页、文本输入框、结果字段、开关、下拉菜单、按钮
  • 方法:
    • navigateToFormsTab() - 导航到表单标签页
    • enterText(text) - 在输入框中输入文本
    • getInputResultText() - 获取输入结果文本
    • toggleSwitch() - 切换开关元素
    • getSwitchText() - 获取开关状态文本
    • selectDropdownOption(optionText) - 选择下拉选项
    • clickActiveButton() - 点击Active按钮
    • clickOkButton() - 点击弹出窗口中的OK按钮

滑动页面(test/pageobjects/swipe.page.js

  • 选择器: 滑动标签页、轮播图、卡片描述
  • 方法:
    • navigateToSwipeTab() - 导航到滑动标签页
    • swipeLeft() - 使用W3C Actions API执行向左滑动手势
    • getAllCardDescriptions() - 滑动浏览并提取所有卡片描述

技术说明

iOS手势的W3C Actions API

iOS测试使用W3C Actions API进行手势自动化,这是现代标准并且与XCUITest驱动程序完全兼容:

await browser
  .action("pointer")
  .move({ x: startX, y: startY })
  .down()
  .pause(100)
  .move({ x: endX, y: endY })
  .up()
  .perform();

注意: 已弃用的 touchPerform() 方法(JSON Wire Protocol)不兼容iOS/XCUITest,因为它使用带有请求体的HTTP GET,这违反了W3C WebDriver规范。

超时配置

由于从zip文件安装应用,iOS测试需要增加超时设置:

  • newCommandTimeout: 300秒
  • connectionRetryTimeout: 300000毫秒
  • connectionRetryCount: 3

故障排除

Android 测试

  • 确保在执行测试前Android模拟器正在运行
  • 验证 com.wdiodemoapp 已安装在模拟器上
  • 检查Android SDK路径是否正确配置

iOS 测试

  • 确保iOS模拟器正在运行(iPhone 16,iOS 18.6)
  • 验证已安装Xcode命令行工具
  • 检查 app/ios/wdio.zip 存在且包含有效的应用包
  • 如果会话创建超时,可能需要更多时间来安装应用(已配置300秒超时)

常见问题

  • 未找到Appium: 使用 npm install -g appium 全局安装
  • 未找到元素: 检查页面对象文件中的选择器
  • 超时错误: 在配置文件中增加超时值
  • iOS手势失败: 使用W3C Actions API而不是已弃用的touchPerform

测试结果

Android 表单测试

  • 状态: ✅ 通过
  • 持续时间: 约12秒
  • 验证: 6个断言

iOS 滑动测试

  • 状态: ✅ 通过
  • 持续时间: 约10秒
  • 验证: 12个断言(6张卡片×每个2个检查)

许可证

ISC