使用 Ruby 客户端为 Appium 编写第一个自动化测试:appium_lib_core 实战指南

发布时间:2026/11/5 7:08:05

使用 Ruby 客户端为 Appium 编写第一个自动化测试:appium_lib_core 实战指南 使用 Ruby 客户端为 Appium 编写第一个自动化测试appium_lib_core 实战指南【免费下载链接】appiumCross-platform automation framework for all kinds of apps, built on top of the W3C WebDriver protocol项目地址: https://gitcode.com/GitHub_Trending/ap/appium本指南以 Appium 官方 Ruby 客户端库appium_lib_core为主线完整演示如何从零初始化 Gemfile、编写基于 test-unit 的测试脚本、通过 Capabilities 启动 Android 会话并运行在真实设备或模拟器上。读完本文你将掌握 Ruby 生态下 Appium 测试的标准项目结构与关键 API 用法并能在本地复现启动设置应用 → 点击 Apps 项 → 关闭会话的完整流程。1. Ruby 官方客户端库appium_lib 与 appium_lib_coreAppium 为 Ruby 提供了两个官方客户端库均通过 RubyGems 分发appium_lib_coregem appium_lib_core推荐使用的核心客户端库。它继承自 Selenium Ruby Binding即selenium-webdriver因此安装该 gem 会自动带上 selenium 绑定可以直接使用 WebDriver 协议下的标准操作。appium_libgem appium_lib在appium_lib_core之上封装的更高层库额外提供一些便捷辅助方法但代价是复杂度更高且其中部分历史方法在最新环境中可能无法正常工作。两者的继承关系为appium_lib_core基于 Selenium Ruby Bindingappium_lib基于appium_lib_core。如果你的需求是简洁、可维护的客户端方案官方推荐直接使用appium_lib_core。选择appium_lib_core还有一个重要的工程原因appium_lib中的 driver 实例通常被设计为全局变量使用这会在多测试实例并行或状态隔离时带来处理实例的问题而appium_lib_core不存在这样的全局变量driver 实例由测试代码显式持有如通过实例变量driver更符合现代测试框架的实践。2. 初始化项目用 Bundler 管理依赖在开始写测试之前先在工作目录中初始化一个 Gemfile 来管理依赖bundle init然后添加 Appium Ruby 客户端依赖。按上文建议使用核心库bundle add appium_lib_core # 或者如果你选择完整库 # bundle add appium_lib本指南的示例测试代码基于test-unit测试框架因此还需要bundle add test-unit上述步骤完成后你的Gemfile应包含以下内容与仓库中 sample-code/quickstarts/rb/Gemfile 一致source https://rubygems.org gem appium_lib_core gem test-unit之后在运行测试前先执行一次bundle install以安装全部依赖。需要说明的是appium_lib_core作为客户端库通过 HTTP 与 Appium 服务器通信它自身不包含任何自动化驱动真正执行 Android 自动化的能力由 Appium 服务器端的 UiAutomator2 驱动提供安装方式见下文第 5 节。3. 完整测试代码逐段解析仓库中提供了开箱即用的示例脚本 sample-code/quickstarts/rb/test.rb核心内容如下require appium_lib_core require test/unit CAPABILITIES { platformName: Android, automationName: uiautomator2, deviceName: Android, appPackage: com.android.settings, appActivity: .Settings, language: en, locale: US } SERVER_URL http://localhost:4723 class AppiumTest Test::Unit::TestCase def setup core ::Appium::Core.for capabilities: CAPABILITIES driver core.start_driver server_url: SERVER_URL end def teardown driver.quit end def test_find_apps driver.wait { |d| d.find_element :xpath, //*[textApps] }.click end end3.1 关键 API 说明Appium::Core.for capabilities: CAPABILITIESappium_lib_core的入口方法接收一个 Capabilities 哈希Ruby 中key: value语法即符号键哈希构建客户端配置对象。它相当于把会话请求参数预封装好。core.start_driver server_url: SERVER_URL向指定地址的 Appium 服务器发起 new session 请求并创建 WebDriver driver 实例。http://localhost:4723是 Appium 服务器的默认监听地址与端口。driver.wait { |d| d.find_element :xpath, //*[textApps] }.clickwait是appium_lib_core提供的显式等待封装会在元素出现前持续重试找到目标元素后立即调用.click。这里使用 XPath 按文本属性textApps定位 Android 设置应用中的Apps列表项。driver.quit在 teardown 中安全关闭会话.空安全调用driver 未初始化时不会报错。这一步会通知 Appium 服务器销毁会话释放被测应用资源。使用appium_lib完整库编写相同测试的代码结构与上述高度类似只是入口方法与辅助方法名称略有不同。4. Capabilities 深入这些参数到底告诉 Appium 什么原文档第 1 步提到定义一组 Capabilities 发送到 Appium 服务器以便 Appium 知道你想要自动化什么。Capabilities 是启动 Appium 会话的核心参数本质是一组键值对值可以是任意合法 JSON 类型。示例中几个关键字段的作用如下Capability值含义platformNameAndroid目标平台类型W3C 标准能力之一automationNameuiautomator2指定使用哪个 Appium 驱动这里对应 UiAutomator2 驱动deviceNameAndroid设备名示例中为非特定设备名主要用于占位appPackagecom.android.settings要启动的应用包名Android 特有扩展能力appActivity.Settings要启动的 ActivityAndroid 特有扩展能力language/localeen/US会话内应用的语言与地区设置4.1appium:前缀与标准能力源码级解读按照 W3C WebDriver 规范扩展能力必须带供应商命名空间前缀以冒号结尾Appium 的供应商前缀是appium:。因此在发送给服务器的最终请求中automationName、appPackage、appActivity等 Appium 专有能力通常会被规范化为appium:automationName、appium:appPackage等形式。在 Appium 服务端这一处理逻辑位于 base-driver 的 capabilities.tsstripAppiumPrefixes函数会把请求中带appium:前缀的能力剥离前缀后与驱动约束进行校验同时STANDARD_CAPS集合包含browserName、browserVersion、platformName、webSocketUrl等用于识别 W3C 标准能力标准能力不应添加appium:前缀。从源码可以看到export const APPIUM_VENDOR_PREFIX appium:; export const PREFIXED_APPIUM_OPTS_CAP ${APPIUM_VENDOR_PREFIX}options;appium_lib_core等客户端会在构造请求时自动为扩展能力补上appium:前缀因此测试代码中写automationName: uiautomator2即可无需手动加前缀。4.2 会话不可变与appium:options分组关于 Capabilities 有两个重要事实会话启动后能力不可变更。一旦请求被服务器接受并创建会话Capabilities 即被固化如果驱动支持运行时调整行为应使用 Settings API而非修改能力。当appium:能力很多时可以把它们整体放入appium:options对象中对象内部无需再加前缀例如{ platformName: Android, appium:options: { automationName: uiautomator2, appPackage: com.android.settings, appActivity: .Settings } }服务端promoteAppiumOptions会把appium:options内部的键提升到顶层并且若同名能力同时出现在顶层与appium:options中appium:options内的值优先。不过在不同客户端语言中构造值为对象的能力写法各异Ruby 中同样是以嵌套 Hash 形式传入。对 Capabilities 的完整介绍包括 always-match / first-match 处理、BiDi 的webSocketUrl能力等可继续阅读 Session Capabilities 指南。5. 运行测试前的环境检查原文档特别强调运行测试前必须确保 Appium 服务器正在另一个终端会话中运行否则客户端会报无法连接服务器的错误。以本仓库对应的 Appium 2 体系为例完整前置条件如下安装并启动 Appium 服务器确认appium命令可用在独立终端运行appium启动服务默认监听0.0.0.0:4723。安装 Android 自动化驱动没有驱动Appium 无法自动化任何平台。安装 UiAutomator2 驱动的标准命令为appium driver install uiautomator2安装成功后可用appium driver doctor uiautomator2校验 Android SDK、JDK 等前置条件是否齐备详见 安装 UiAutomator2 驱动程序 一文。也可用appium setup批量安装移动端常用驱动。准备设备或模拟器通过adb devices确认设备已连接。6. 执行测试并观察结果环境就绪后在项目目录执行# 如果尚未安装依赖先执行 bundle install bundle exec ruby test.rb整个测试脚本做的事情可以拆解为五个步骤定义一组 Capabilities参数发送给 Appium 服务器告知其自动化目标Android 平台 UiAutomator2 驱动 内置设置应用在内置的 Android 设置应用上启动一个 Appium 会话setup阶段完成查找Apps列表项并点击它test_find_apps用例主体短暂停留wait等待与点击操作自然产生的停顿——纯粹为了视觉效果结束 Appium 会话teardown阶段执行driver.quit。如果一切顺利你会看到设置应用被打开自动导航到Apps视图随后应用关闭测试用例通过。这也是驱动实例由实例变量持有、不依赖全局变量的appium_lib_core风格在整个测试生命周期中的完整体现setup创建会话、用例执行操作、teardown清理会话每个测试方法之间互不干扰。7. 进一步探索的方向示例代码只是 Appium Ruby 自动化的起点官方建议从以下几个方面继续深入深入理解 Session Capabilities掌握appium:前缀、appium:options分组及会话能力不可变的约束阅读 管理 Appium 驱动程序和插件学习驱动与插件的安装、升级和卸载方式浏览 设置Settings 文档了解会话运行期间可动态调整的行为查看 生态系统页面了解可用的客户端库、驱动、插件与工具清单以及 Ecosystem Clients 中各语言客户端的更多用法使用 Appium Inspector 对应用进行可视化检查快速获得测试脚本所需的元素定位器如示例中的 XPath//*[textApps]。至此你已经用 Ruby 跑通了第一个 Appium 测试迈出了移动端自动化的第一步。建议继续阅读 后续步骤规划下一步的探索路线。【免费下载链接】appiumCross-platform automation framework for all kinds of apps, built on top of the W3C WebDriver protocol项目地址: https://gitcode.com/GitHub_Trending/ap/appium创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/11/2 3:52:27

PDFPatcher(PDF补丁丁):免费一站式 PDF 处理完整指南

PDFPatcher(PDF补丁丁):免费一站式 PDF 处理完整指南 【免费下载链接】PDFPatcher PDF补丁丁——PDF工具箱,可以编辑书签、剪裁旋转页面、解除限制、提取或合并文档,探查文档结构,提取图片、转成图片等等 …

2026/11/5 13:10:54

LunaTranslator OCR实操指南:5步搞定游戏文字识别配置

LunaTranslator OCR实操指南:5步搞定游戏文字识别配置 【免费下载链接】LunaTranslator 视觉小说翻译器 / Visual Novel Translator 项目地址: https://gitcode.com/GitHub_Trending/lu/LunaTranslator 某款视觉小说的对话栏带飘花特效,OCR结果每…

2026/11/5 13:55:19

GD32E10x官方例程入门:从GPIO点灯到串口调试

简介:这份GD32E10x系列官方例程面向嵌入式硬件与单片机开发者,基于ARM Cortex-M3内核,汇集兆易创新GD32E10x的示例代码,适合工业控制、消费电子、通信设备等场景的学习、验证与二次开发。压缩包共935个文件,约11.16MB&…

2026/11/5 13:50:18

基于Django的运维平台实战:资产、发布、巡检、告警一体化

简介:这份资源是一套基于Django框架开发的运维平台源码,面向具备Python基础、希望了解Web运维系统实现思路的开发者与运维人员,可用于学习主机管理、服务监控、日志查看、任务调度、权限控制、资源统计、脚本执行与故障告警等常见运维模块的落…

2026/11/5 13:25:11

基于ADS122U04IPWR与STM32F427ZI的工业测温方案设计

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/5 13:20:10

Dubbo服务下线实时告警:基于ZooKeeper Watch的轻量级监控方案

简介:这是一套面向Java分布式系统运维与开发人员的Dubbo服务高可用监控解决方案,聚焦于Provider异常下线的实时感知与告警响应。资源通过Zookeeper监听机制实现服务状态变更捕获,结合邮件通知模块,在不侵入原有Dubbo代码的前提下&…

2026/11/5 13:20:10

SSM超市管理系统源码解析:从分层架构到本地部署与业务修改

简介:这份资源是面向高校计算机专业学生与Java初学者的一套SSM框架课程设计完整项目,围绕超市管理场景,帮助读者完成从框架整合到业务模块落地的实战练习,适合作为毕业设计或课程作业的参考方案。压缩包共792个文件,约…

2026/11/5 13:20:10

SSM超市管理系统实战:从课设跑通到二次开发全解析

简介:这份资源是面向高校计算机相关专业学生与Java入门开发者的SSM课程设计参考项目,围绕超市管理场景,解决商品、库存、销售等业务模块从设计到落地的实践需求,适合作为课程作业、毕业设计原型或SSM框架练手案例。压缩包共792个文…

2026/11/4 12:38:23

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/4 21:04:25

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/5 0:02:07

多智能体协作系统架构设计与实践优化

1. 多智能体协作系统的时代背景2017年Transformer架构的诞生彻底改变了人工智能的发展轨迹。当行业还沉浸在单一大模型带来的性能突破时,Anthropic的研究团队已经将目光投向了更前沿的领域——如何让多个智能体通过协作产生超越单体能力的系统智能。这就像交响乐团中…

2026/11/5 0:02:07

大模型系统性入门实战指南:从原理到部署微调的全链路路线

提到大模型的系统性入门,我先说个结论:这事真不难,难的是资料太散、路线太多,今天这个框架明天那个工具,新人很容易在“收藏夹吃灰”和“教程看到一半放弃”之间反复横跳。市面上关于大模型的内容少说有几十万篇&#…

2026/11/5 0:02:07

鸿蒙文件系统沙箱机制解析与开发实践

1. 鸿蒙文件系统沙箱机制深度解析作为一名从Android转向鸿蒙开发的工程师,我深刻体会到文件系统访问是迁移过程中最先遇到的"拦路虎"。在Android上运行良好的文件读写代码,在鸿蒙真机环境却频频出现文件写入后神秘消失或直接抛出权限拒绝错误的…

2026/11/4 12:38:23

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/4 21:04:25

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑