Appium WebdriverIO测试自动化
该项目包含使用Appium和WebdriverIO的移动应用程序的E2E测试自动化,支持Android和iOS平台。
注: 此项目使用示例移动应用程序(wdiodemoapp)由WebdriverIO提供,用于演示和测试目的。
项目结构
mcp-appium-server/
├── app/
│ ├── android/ # Android app files
│ └── ios/ # iOS app files (wdio.zip)
├── test/
│ ├── pageobjects/ # Page Object Model files
│ │ ├── forms.page.js # Android Forms screen
│ │ └── swipe.page.js # iOS Swipe screen
│ └── specs/ # Test specification files
│ ├── forms.e2e.test.js # Android Forms E2E test
│ └── swipe.e2e.test.js # iOS Swipe E2E test
├── wdio.conf.ts # Base WebdriverIO configuration
├── wdio.android.conf.ts # Android-specific configuration
├── wdio.ios.conf.ts # iOS-specific configuration
└── package.json先决条件
- Node.js(v18或更高版本)
- npm或纱线
- Appium已在全球范围内安装(
npm install -g appium) - Android SDK(用于Android测试)
- Xcode(仅适用于iOS测试,macOS)
- 运行Android模拟器或iOS模拟器
安装
npm install测试用例
安卓-表格E2E测试
文件: test/specs/forms.e2e.test.js
测试流程:
- 导航到“表单”选项卡
- 在输入框中输入文本“ABCDEF”
- 验证文本输入是否正确
- 打开开关
- 验证开关状态文本是否已更改
- 从下拉菜单中选择“Appium太棒了”
- 点击“活动”按钮
- 在显示的弹出窗口中单击“确定”
运行命令:
npx wdio run wdio.android.conf.ts --spec test/specs/forms.e2e.test.js预期结果: ✅ 1次传球(~12秒)
iOS-滑动E2E测试
文件: test/specs/swipe.e2e.test.js
测试流程:
- 导航到“滑动”选项卡
- 滑动旋转木马,从所有6张卡中提取描述
- 验证是否收集了所有6个描述
- 验证每张卡中的具体内容
卡片说明:
- “WebdriverIO是完全开源的,可以在GitHub上找到”
- “WebdriverIO拥有一个支持所有成员的伟大社区。”
- “JS基金会托管着跨越整个JavaScript生态系统的项目。”
- “围绕WebdriverIO的社区正在各种用户组或会议上积极讨论与WebdriverIO自动化测试相关的特定主题。”
- 添加辅助函数,或更复杂的现有命令集和组合,既简单又非常有用
- “WebdriverIO与JavaScript世界中的大多数TDD和BDD测试框架结合使用”
运行命令:
npx wdio run wdio.ios.conf.ts --spec test/specs/swipe.e2e.test.js预期结果: ✅ 1次传球(~10s)
运行测试
运行所有测试
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 - 设备:安卓模拟器(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() -单击“活动”按钮 - clickOkButton() -在弹出窗口中单击“确定”
滑动页面(test/pageobjects/swipe.page.js)
- 选择器: 滑动标签、旋转木马、卡片描述
- 方法:
- navigateToSwipeTab() -导航到“滑动”选项卡 - swipeLeft() -使用W3C Actions API执行向左滑动手势 - getAllCardDescriptions() -滑动并提取所有卡片描述
技术说明
W3C操作API iOS手势
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张支票)
许可证
国际协调委员会
