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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1145304.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

智能侦测数据回流:自动优化模型的闭环

智能侦测数据回流&#xff1a;自动优化模型的闭环 1. 什么是数据回流与模型自动优化&#xff1f; 想象一下&#xff0c;你开了一家奶茶店&#xff0c;每天顾客的反馈&#xff08;比如"太甜了""珍珠不够Q弹"&#xff09;如果能自动变成第二天调整配方的依…

基于多时段动态电价的电动汽车有序充电策略优化MATLAB实现

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。&#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室&#x1f447; 关注我领取海量matlab电子书和数学建模资料 &#x1f34…

AI侦测模型热更新:云端无缝切换新版本,服务0中断

AI侦测模型热更新&#xff1a;云端无缝切换新版本&#xff0c;服务0中断 1. 为什么需要模型热更新&#xff1f; 想象一下你正在玩一个在线游戏&#xff0c;突然服务器维护停机了&#xff0c;所有玩家都被踢出游戏。这种体验很糟糕吧&#xff1f;对于AI侦测模型的运维团队来说…

AI异常检测极速版:手机APP+云端分析,1分钟创建监测任务

AI异常检测极速版&#xff1a;手机APP云端分析&#xff0c;1分钟创建监测任务 1. 什么是AI异常检测&#xff1f; 想象一下&#xff0c;你开了一家便利店&#xff0c;每天有上百笔交易。突然有一天&#xff0c;收银员不小心多按了一个零&#xff0c;或者有顾客故意用假币。这些…

2025年北京大学计算机考研复试机试真题(解题思路 + AC 代码)

2025年北京大学计算机考研复试机试真题 2025年北京大学计算机考研复试上机真题 历年北京大学计算机考研复试上机真题 历年北京大学计算机考研复试机试真题 更多学校完整题目开源地址&#xff1a;https://gitcode.com/u014339447/pgcode 01 最小生成树-北京大学 题目描述 …

智能安防快速体验:5个预训练模型任选,1元起试用

智能安防快速体验&#xff1a;5个预训练模型任选&#xff0c;1元起试用 1. 为什么需要智能安防解决方案&#xff1f; 想象一下这样的场景&#xff1a;你是一家硬件销售商&#xff0c;客户对AI摄像头很感兴趣&#xff0c;但他们最常问的问题是"这摄像头能识别什么&#x…

算法竞赛备考冲刺必刷题(C++) | 洛谷 P1746 离开中山路

本文分享的必刷题目是从蓝桥云课、洛谷、AcWing等知名刷题平台精心挑选而来&#xff0c;并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构&#xff0c;旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。 欢迎大…

隐私合规实体识别:云端隔离环境+数据自动清除,安全审计友好

隐私合规实体识别&#xff1a;云端隔离环境数据自动清除&#xff0c;安全审计友好 1. 为什么银行需要隐私合规实体识别&#xff1f; 银行合规部门每天都要处理大量包含客户敏感信息的文档和工单。传统的人工审核方式不仅效率低下&#xff0c;还存在以下痛点&#xff1a; 合规…

用HDBSCAN稳住罕见病亚型聚类

&#x1f4dd; 博客主页&#xff1a;jaxzheng的CSDN主页 用HDBSCAN稳住罕见病亚型聚类&#xff1a;数据科学赋能精准医疗新突破目录用HDBSCAN稳住罕见病亚型聚类&#xff1a;数据科学赋能精准医疗新突破 引言&#xff1a;罕见病聚类的临床困境与数据科学机遇 HDBSCAN&#xff1…

LUT调色包大全(附下载木木馆长繁花链接)

在视频后期调色中&#xff0c;LUT&#xff08;颜色查找表&#xff09;是快速定调、强化氛围的核心工具&#xff0c;而影调作为画面的灵魂&#xff0c;直接决定作品的情绪基调。下面结合几款热门调色资源&#xff0c;从内容特性到使用方法&#xff0c;为大家做一次集中梳理&…

AI侦测数据标注神器:云端多人协作,效率提升300%

AI侦测数据标注神器&#xff1a;云端多人协作&#xff0c;效率提升300% 引言&#xff1a;数据标注的痛点与云端解决方案 当你需要标注10万张图片来训练AI模型时&#xff0c;传统本地标注工具往往会成为效率瓶颈。团队成员各自安装软件、频繁传输文件、版本混乱冲突、硬件性能…

冷热电气多能互补的微能源网优化调度Matlab实现

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。&#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室&#x1f447; 关注我领取海量matlab电子书和数学建模资料 &#x1f34…

亲测好用!9款AI论文写作软件测评:本科生毕业论文必备

亲测好用&#xff01;9款AI论文写作软件测评&#xff1a;本科生毕业论文必备 2026年AI论文写作工具测评&#xff1a;为何值得一看&#xff1f; 随着人工智能技术的不断进步&#xff0c;AI论文写作工具逐渐成为高校学生&#xff0c;尤其是本科生在撰写毕业论文时的重要辅助。然…

AI智能体异常检测实战:10元预算玩转智能运维

AI智能体异常检测实战&#xff1a;10元预算玩转智能运维 引言&#xff1a;当运维遇上AI智能体 想象一下这样的场景&#xff1a;凌晨3点&#xff0c;服务器突然出现异常流量波动&#xff0c;值班工程师需要手动检查几十个监控指标才能定位问题根源。这种传统运维方式不仅效率低…

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

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

5大AI实体侦测模型对比:云端GPU 3小时全测完,省万元显卡钱

5大AI实体侦测模型对比&#xff1a;云端GPU 3小时全测完&#xff0c;省万元显卡钱 1. 为什么你需要云端GPU测试实体侦测模型&#xff1f; 作为一名技术选型工程师&#xff0c;当老板只给你1天时间和200元预算来评估不同实体识别方案时&#xff0c;传统方法会遇到两个致命问题…

智能侦测模型动物园:比较50种算法,云端GPU自动出报告

智能侦测模型动物园&#xff1a;比较50种算法&#xff0c;云端GPU自动出报告 引言&#xff1a;为什么需要自动化评测平台&#xff1f; 在AI安全检测领域&#xff0c;技术选型团队常常面临一个共同难题&#xff1a;面对市面上数十种行为检测算法&#xff0c;如何快速评估它们的…

AI侦测模型监控面板:云端Prometheus+Grafana一键部署

AI侦测模型监控面板&#xff1a;云端PrometheusGrafana一键部署 引言 作为一名运维工程师&#xff0c;你是否经常遇到这样的困扰&#xff1a;线上AI服务的性能指标忽高忽低&#xff0c;却无法快速定位问题&#xff1f;传统的监控方案需要安装Prometheus、Grafana、Exporter等…

没服务器怎么做AI安全?云端检测1小时1块随用随停

没服务器怎么做AI安全&#xff1f;云端检测1小时1块随用随停 1. 为什么需要云端AI安全检测&#xff1f; 作为自由职业安全顾问&#xff0c;你可能经常遇到这样的困境&#xff1a;客户要求演示AI异常流量检测能力&#xff0c;但自建服务器成本高、维护复杂&#xff0c;尤其是一…

实体识别模型调参指南:云端Jupyter免安装,实时可视化效果

实体识别模型调参指南&#xff1a;云端Jupyter免安装&#xff0c;实时可视化效果 引言 作为一名算法新人&#xff0c;当你被安排优化实体识别模型参数时&#xff0c;是否遇到过这些困扰&#xff1a;公司GPU服务器要排队使用&#xff0c;自己电脑跑一次实验要2小时&#xff0c…