news 2026/4/23 15:01:52

Android 原生/混合应用的自动化测试脚本开发,尤其适合需要批量编写测试用例、强调可维护性的场景。

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Android 原生/混合应用的自动化测试脚本开发,尤其适合需要批量编写测试用例、强调可维护性的场景。

你提供的这段代码是基于 Appium 框架封装的Android 移动端自动化测试核心操作类,命名为AndroidEncapsulateOperation,它把 Appium 原生的零散操作(如点击、滑动、长按、键盘模拟等)封装成了标准化、可配置的方法,方便在自动化测试脚本中直接调用。下面我会从整体功能、核心模块、关键逻辑、使用场景四个维度帮你完整解析。

一、整体功能总结

这个类的核心目标是:将 Appium 对 Android 元素/页面的原生操作抽象成高内聚、低耦合的工具方法,对外暴露统一的调用入口,支持通过“操作关键字+参数”的方式执行不同的自动化动作,同时内置日志记录和异常提示,提升自动化脚本的可维护性和可读性。

二、核心模块拆解

整个类分为 5 个核心方法,每个方法负责一类操作,下面逐一对每个方法解析:

1. selectOperation:下拉框(Select)控件专属操作
publicstaticStringselectOperation(AndroidElementae,Stringoperation,StringoperationValue)
  • 作用:专门处理 Android 页面中的下拉选择框(Select 控件)操作,封装了原生 Select 类的核心方法。
  • 参数说明
    • ae:目标下拉框元素(AndroidElement 类型);
    • operation:操作关键字(固定值);
    • operationValue:操作参数(如下拉选项的文本/值/索引)。
  • 支持的操作关键字
    关键字作用示例参数
    selectbyvisibletext通过选项可见文本选择“待执行”
    selectbyvalue通过选项 value 属性选择“0”
    selectbyindex通过选项索引选择“1”
    isselect判断元素是否被选中无(返回布尔值)
  • 核心逻辑:通过switch-case匹配操作关键字,调用对应 Select 方法,同时记录日志并返回操作结果描述。
2. getOperation:元素属性获取操作
publicstaticStringgetOperation(AndroidElementae,Stringoperation,Stringvalue)
  • 作用:获取 Android 元素的各类属性值(文本、标签名、自定义属性等),是自动化测试中“断言/校验”的核心支撑。
  • 参数说明
    • ae:目标元素;
    • operation:属性获取关键字;
    • value:自定义属性名(仅getattribute/getcssvalue需要)。
  • 支持的操作关键字
    关键字作用返回示例
    gettext获取元素显示文本“登录按钮”
    gettagname获取元素标签名“button”
    getattribute获取元素自定义属性传 “resource-id” 返回 “com.xxx:id/login_btn”
    getcssvalue获取元素 CSS 属性(H5 页面有效)传 “color” 返回 “#ffffff”
  • 核心逻辑:通过switch-case匹配关键字,调用元素的属性获取方法,拼接结果描述并返回,同时记录日志。
3. objectOperation:元素(AndroidElement)通用操作
publicstaticStringobjectOperation(AndroidDriver<AndroidElement>appium,AndroidElementae,Stringoperation,StringoperationValue,Stringproperty,StringpropertyValue)
  • 作用:处理单个 Android 元素的基础交互操作(点击、输入、清空、长按等),是自动化测试中最常用的核心方法。
  • 参数说明
    • appium:AndroidDriver 实例(驱动核心);
    • ae:目标元素;
    • operation:元素操作关键字;
    • operationValue:操作参数(如输入文本、长按时长);
    • property:元素定位属性(如 “id”/“xpath”);
    • propertyValue:元素定位值(如 “com.xxx:id/input”)。
  • 支持的操作关键字(核心)
    关键字作用示例参数
    click点击元素
    sendkeys向输入框输入文本“13800138000”
    clear清空输入框内容
    isenabled判断元素是否可用无(返回 true/false)
    isdisplayed判断元素是否可见无(返回 true/false)
    exjsob对元素执行 JS 脚本“arguments[0].click()”
    longpresselement长按元素“3”(长按3秒)
  • 关键逻辑
    • 长按操作(longpresselement):通过AndroidTouchAction构建长按动作,支持自定义长按时长(默认无时长,传数字则转换为 Duration);
    • 所有操作都会返回“操作结果描述字符串”,并通过LogUtil记录详细日志(包含定位属性+值),方便调试。
4. alertOperation:弹窗(Alert)操作
publicstaticStringalertOperation(AndroidDriver<AndroidElement>appium,Stringoperation)
  • 作用:处理 Android 页面的系统弹窗(如权限提示、确认框),封装了原生 Alert 类的操作。
  • 参数说明
    • appium:AndroidDriver 实例;
    • operation:弹窗操作关键字。
  • 支持的操作关键字
    关键字作用
    alertaccept确认弹窗(点击“确定”/“允许”)
    alertdismiss关闭弹窗(点击“取消”/“拒绝”)
    alertgettext获取弹窗文本内容
  • 核心逻辑:先通过appium.switchTo().alert()切换到弹窗上下文,再执行对应操作,适合处理系统级原生弹窗(注意:自定义弹窗需用元素定位操作)。
5. driverOperation:驱动/页面级全局操作
publicstaticStringdriverOperation(AndroidDriver<AndroidElement>appium,Stringoperation,StringoperationValue)throwsException
  • 作用:处理针对整个 Android 页面/驱动的全局操作(滑动、键盘模拟、截图、切换上下文等),是自动化测试中处理“页面交互”的核心方法。

  • 参数说明

    • appium:AndroidDriver 实例;
    • operation:全局操作关键字;
    • operationValue:操作参数(如滑动时长+次数、坐标等)。
  • 核心子模块拆解

    (1)上下文(Context)操作(混合应用必备)
    关键字作用示例参数
    getcontexthandles获取所有上下文句柄“1”(返回第1个句柄)
    gotocontext切换上下文(原生/H5)“WEBVIEW_com.xxx”
    getcontext获取当前上下文
    • 场景:Android 混合应用(原生+H5)中,需切换到 WEBVIEW 上下文才能操作 H5 元素。
    (2)滑动操作(移动端最常用)

    支持 8 种滑动关键字(swipeup/swipedown/swipeleft/swiperight+swipepageup/swipepagedown/...),逻辑完全一致,仅滑动方向不同:

    • 参数格式:时长|次数(如 “2|3” 表示每次滑动持续2秒,滑动3次);
    • 核心:调用AndroidBaseAppium工具类的滑动方法(如swipePageDown),封装了 Appium 原生的滑动逻辑。
    (3)坐标交互操作
    关键字作用示例参数
    longpressxy长按指定坐标"100
    pressxy点击指定坐标"100
    tapxy轻击指定坐标"100
    moveto拖动(多坐标点)"100,200
    • 关键逻辑:通过AndroidTouchActionpress/moveTo/tap方法实现坐标级操作,支持多段拖动(moveto),适配不同滑动场景。
    (4)其他核心操作
    关键字作用示例参数
    androidkeycode模拟手机键盘“ENTER”(回车)/ “BACK”(返回)
    hidekeyboard隐藏手机软键盘
    exAdbShell执行 ADB 命令“adb shell input text 123456”
    timeout设置全局等待时间“30”(元素等待30秒)
    screenshot截取当前屏幕无(自动生成带时间戳的截图名)
    exjs执行全局 JS 脚本“window.scrollTo(0,100)”

三、关键细节与注意事项

  1. 日志体系:所有操作都通过LogUtil.APP.info()记录详细日志,包含操作类型、参数、结果,方便自动化脚本调试和问题定位。
  2. 参数校验:核心操作(如滑动、坐标点击)都会先校验参数是否为数字,若参数非法则返回明确的错误描述(如“swipeup参数判断时间出现异常”)。
  3. 兼容性处理
    • moveto方法中处理了 Appium API 的“坐标偏移”问题(单段拖动用绝对坐标,多段拖动用相对偏移);
    • longpresselement支持自定义时长(默认无时长),适配不同应用的长按触发逻辑。
  4. 依赖类:代码中依赖了多个自定义工具类,需确保这些类存在才能运行:
    • AndroidBaseAppium:封装了滑动、截图等底层方法;
    • ChangString:提供数字校验等字符串工具;
    • LogUtil:日志工具;
    • cn.hutool.core.util.StrUtil:Hutool 字符串工具(判断参数非空)。

四、使用场景示例

下面是一个典型的调用示例,展示如何用这个类执行“登录操作”:

// 1. 初始化 AndroidDriver(省略驱动配置)AndroidDriver<AndroidElement>appium=newAndroidDriver<>(newURL("http://127.0.0.1:4723/wd/hub"),desiredCapabilities);// 2. 定位手机号输入框AndroidElementphoneInput=appium.findElement(By.id("com.xxx:id/phone_input"));// 输入手机号AndroidEncapsulateOperation.objectOperation(appium,phoneInput,"sendkeys","13800138000","id","com.xxx:id/phone_input");// 3. 定位密码输入框AndroidElementpwdInput=appium.findElement(By.id("com.xxx:id/pwd_input"));// 输入密码AndroidEncapsulateOperation.objectOperation(appium,pwdInput,"sendkeys","123456","id","com.xxx:id/pwd_input");// 4. 定位登录按钮AndroidElementloginBtn=appium.findElement(By.id("com.xxx:id/login_btn"));// 点击登录AndroidEncapsulateOperation.objectOperation(appium,loginBtn,"click","","id","com.xxx:id/login_btn");// 5. 滑动页面查找“我的”入口AndroidEncapsulateOperation.driverOperation(appium,"swipeup","2|1");// 6. 截图保存AndroidEncapsulateOperation.driverOperation(appium,"screenshot","");

总结

  1. 核心定位:这是一套“面向关键字驱动”的 Android 自动化测试封装,把 Appium 原生 API 转化为“关键字+参数”的调用方式,适合构建可配置的自动化测试框架;
  2. 核心优势
    • 标准化:所有操作返回统一格式的结果描述,日志记录规范;
    • 易用性:无需记忆 Appium 原生 API,通过关键字即可调用所有核心操作;
    • 健壮性:内置参数校验和异常提示,降低脚本崩溃概率;
  3. 适用场景:Android 原生/混合应用的自动化测试脚本开发,尤其适合需要批量编写测试用例、强调可维护性的场景。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 10:05:44

没预算怎么做AI安全?云端按秒计费拯救小团队

没预算怎么做AI安全&#xff1f;云端按秒计费拯救小团队 1. 引言&#xff1a;小团队的AI安全困境 创业公司发现竞争对手纷纷部署了AI安全防护系统&#xff0c;而自己既缺乏专业技术团队&#xff0c;又面临高昂的外包开发费用。传统安全方案动辄数十万的年费让初创企业望而却步…

作者头像 李华
网站建设 2026/4/19 15:54:23

AI侦测保姆级指南:小白10分钟上手云端GPU服务

AI侦测保姆级指南&#xff1a;小白10分钟上手云端GPU服务 引言&#xff1a;为什么你需要云端GPU&#xff1f; 作为一名转行AI的产品经理&#xff0c;你可能经常遇到这样的场景&#xff1a;网上看到某个酷炫的AI侦测技术&#xff0c;兴冲冲下载模型后却遇到"CUDA不可用&q…

作者头像 李华
网站建设 2026/4/23 12:48:59

多领域实体识别方案:金融/医疗/法律预训练模型,按需切换

多领域实体识别方案&#xff1a;金融/医疗/法律预训练模型&#xff0c;按需切换 引言&#xff1a;为什么需要多领域实体识别&#xff1f; 想象你是一名IT服务商的技术负责人&#xff0c;客户遍布金融、医疗、法律等多个行业。每当新客户提出需求时&#xff0c;都需要从头训练…

作者头像 李华
网站建设 2026/4/23 14:13:15

AI监控模型实测对比:云端GPU 2小时省下万元显卡钱

AI监控模型实测对比&#xff1a;云端GPU 2小时省下万元显卡钱 1. 为什么需要云端GPU测试AI监控模型 作为安防行业的CTO&#xff0c;您在采购新的AI监控算法时一定遇到过这样的困境&#xff1a;各家供应商都说自己的模型效果最好&#xff0c;但实际测试需要购买昂贵的显卡设备…

作者头像 李华
网站建设 2026/4/23 10:11:34

AI行为分析省钱攻略:按需GPU比买显卡省90%,1小时1块

AI行为分析省钱攻略&#xff1a;按需GPU比买显卡省90%&#xff0c;1小时1块 引言&#xff1a;当AI私活遇上硬件瓶颈 最近有位自由开发者朋友接了个商场异常行为检测的私活&#xff0c;客户要求先看演示效果再签合同。但问题来了——他的MacBook根本跑不动那些AI模型&#xff…

作者头像 李华
网站建设 2026/4/23 10:10:05

实体识别模型新手指南:免环境配置,3个命令跑通全流程

实体识别模型新手指南&#xff1a;免环境配置&#xff0c;3个命令跑通全流程 引言 作为一名Java工程师&#xff0c;突然被抽调参与AI项目时&#xff0c;面对Python虚拟环境、pip install和各种依赖冲突&#xff0c;难免会感到头疼。实体识别&#xff08;Named Entity Recogni…

作者头像 李华