adb
  • 构成

    • client端,在电脑上,负责发送adb命令

    • daemon守护进程,在手机上,负责接收和执行adb命令

    • server端,在电脑上,负责管理client和daemon之间的通信

![[Pasted image 20250825201322.png]]

  • 包名,对应着应用程序; 界面名,对应着应用程序的某个界面

  • 如何获取包名和界面名

adb shell dumpsys window windows | findstr mFocusedApp
  • 从电脑发送文件到手机
adb push 电脑的文件路径 手机的文件夹的路径
  • 从手机拉取文件到电脑
adb pull 手机的文件路径 电脑的文件夹的路径
  • 获取app启动时间
adb shell am start -W 包名/界面名
  • 获取手机的日志
adb logcat
其他命令
  • 安装app到手机
   adb install apk路径
  • 卸载手机上的app
adb uninstall 包名
  • 查看连接设备的数量及设备号
adb devices
  • 进入到android手机系统内部的命令行中
adb shell
  • 关闭adb服务
adb kill-server
  • 开启adb服务
adb start-server
  • 查看adb帮助
adb --help
打开模拟器的设置应用
# 导入 Appium 的 webdriver 模块,用于控制移动设备或模拟器  
import time  from appium import webdriver  # 创建一个字典,存放期望能力(Desired Capabilities)  
desired_caps = dict()  # 指定平台为 Androiddesired_caps['platformName'] = 'Android'  # 指定 Android 系统版本(要和设备实际版本匹配)  
desired_caps['platformVersion'] = '10'  # 指定设备名称或设备 ID(可以通过 adb devices 查看)  
desired_caps['deviceName'] = '192.168.189.102:5555'  # 指定要启动的应用包名(唯一标识应用)  
desired_caps['appPackage'] = 'com.android.settings'  # 指定要启动的 Activity(启动应用后的界面)  
desired_caps['appActivity'] = '.Settings'  # 连接 Appium Server 并创建 WebDriver 对象  
# Appium Server 会根据 desired_caps 启动指定设备上的应用  
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)  time.sleep(5)  
# 测试结束后关闭 WebDriver 会话,释放资源  
driver.quit()
操作 Android 常用方法总结
# 启动其他 App
# 参数:
#   appPackage:要打开的应用的包名
#   appActivity:要打开的界面名(Activity)
driver.start_activity(appPackage, appActivity)# 获取当前操作的 App 包名
current_pkg = driver.current_package# 获取当前操作的 App 界面名(Activity)
current_act = driver.current_activity# 关闭当前操作的 App(仅关闭应用,不关闭驱动对象)
driver.close_app()# 关闭驱动对象,同时关闭所有关联的 App
driver.quit()# 小结:
# close_app() → 只关闭应用,驱动对象仍在
# quit() → 关闭驱动对象,同时关闭所有 App# ================================
# 安装/卸载应用
# ================================# 安装 App
# 参数:
#   app_path:apk 文件的路径
driver.install_app(app_path)# 卸载 App
# 参数:
#   app_id:应用程序包名
driver.remove_app(app_id)# 判断 App 是否已安装
# 参数:
#   app_id:应用程序包名
# 返回值:
#   布尔类型,True 表示已安装,False 表示未安装
is_installed = driver.is_app_installed(app_id)
定位元素的注意点

如果 find_element_by_xxx 方法,传入了一个没有的条件,会报错,NoSuchElementException

如果 find_elements_by_xxx 方法,传入了一个没有的条件,不会报错,返回一个空列表

元素等待

隐式等待:
全局生效,对所有元素定位代码都有效
若超时未找到,抛出 NoSuchElementException

driver.implicitly_wait(10)  

显式等待

WebDriverWait(driver, 10).until(EC.visibility_of_element_located((AppiumBy.ID, "com.android.settings:id/title")  # 定位方式+定位值(元组格式))
).click()  # 找到元素后直接点击

隐式等待和显式等待的选择

  • 从使用的角度上:

    • 隐式等待更简单

    • 显式等待相对负责

  • 从灵活性的角度上:

    • 显示等待更加灵活,因为可以针对每一个元素进行单独的设置

    • 隐式等待是针对全局的定位元素

元素操作API

获取元素的位置:

  • 关键属性

    • location

    • 是一个字典,字典中有 x 和 y 两个 key

    • 取到的数据类型是 int 的

获取元素的大小:

  • 关键属性

    • size

    • 是一个字典,字典中有 width 和 height 两个 key

    • 取到的数据类型是 int 的

如何根据元素的属性名获取属性值:

  • 关键的方法

    • get_attribute(“属性名”)
  • 注意点

    • 想要获取 resource-id 使用 resourceId 属性名 API>=18

    • 想要获取 class 使用 className 属性名 API>=18

    • 想要获取 content-desc 使用 name 属性名

    • 其他的,都可以参考 uiautomator viewer 中的 属性名

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

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

相关文章

栈指针(Stack Pointer)是什么?

栈指针(Stack Pointer)是什么? 首先,用一个简单易懂的方式解释栈指针(Stack Pointer)。 核心比喻:摞起来的书 想象有一摞书整齐地堆在桌面上: 这摞书就是“栈”(Stack),它是一种后进先出(LIFO) 的数据结构。你只能从最顶部拿走一本书(“弹出”),或者把一本新…

数据结构:红黑树(Red-Black Tree)

目录 从AVL树的“烦恼”说起 如何用“颜色”来定义“大致平衡”?—— 红黑树的五个规则 五个规则如何保证“大致平衡”? 用 C/C 代码定义红黑树的结构 定义颜色和节点结构 定义树的结构和哨兵节点 从AVL树的“烦恼”说起 我们从已经了解的 AVL 树出…

Ubuntu22.04安装VMware Tools

文章目录前言安装open-mv-tools前言 本教程使用的版本是Ubuntu22.04.5,由于虚拟机上面的重新安装VMware Tools是灰的,于是自动下载安装open-mv-tools, 安装open-mv-tools 打开终端,更新一下 sudo apt update这一步可能需要先…

DBeaver连接SQL Server时添加驱动后仍提示找不到驱动的解决方法

DBeaver连接SQL Server时添加驱动后仍提示找不到驱动的解决方法 在使用DBeaver连接SQL Server时,即使您已手动添加驱动文件,系统仍提示“找不到驱动”,这通常是由驱动配置错误、版本不兼容或SQL Server设置问题引起的。以下我将逐步为您提供解…

JVM之【类加载系统】

目录 前言 类加载过程 类加载 执行过程 加载阶段 连接阶段 初始化阶段 类加载器 BootstrapClassLoader ExtClassLoader AppClassLoader 类加载器之间的关系 双亲委派机制 核心思想 好处 源码分析 类加载器之间的父子层级关系 双亲委派的体现 前言 上文中提到…

【 限流技术 | 从四大限流算法到Redisson令牌桶实践 】

引言:为什么需要限流?在现代分布式系统中,服务的稳定性是至关重要的。在遇到突发的请求量激增,恶意的用户访问,亦或是请求频率过高给下游服务带来较大压力时,我们常常需要通过缓存、限流、熔断降级、负载均…

深入解析Java NIO多路复用原理与性能优化实践指南

深入解析Java NIO多路复用原理与性能优化实践指南 技术背景与应用场景 在高并发网络编程中,传统的阻塞 I/O 模型往往因每个连接都占用一个线程或一个系统调用而导致线程资源浪费、线程切换开销剧增等问题,难以满足数万甚至数十万并发连接的负载要求。Jav…

目标检测数据集 第006期-基于yolo标注格式的汽车事故检测数据集(含免费分享)

目录 目标检测数据集 第006期-基于yolo标注格式的汽车事故检测数据集(含免费分享) 超实用汽车事故检测数据集分享,助力计算机视觉研究! 1、背景 2、数据详情 数据集基本信息 结构组成 标注格式与示例 类标签说明 数据增强情况 3、应用场景 4、…

应用密码学(书籍学习笔记、基础知识) 一

本博客为读《应用密码学》所得笔记 文章目录一、 加密与解密1.2 秘钥Key1.2.1 引入秘钥K1.2.2 加密秘钥K1,解密秘钥K2二、对称算法 VS 公开密钥算法**① 对称算法** - 传统密码算法 **(Symmetric Algorithm) 🔑****② 非对称算法特点** - 公开秘钥算法 *…

【攻防世界】Web_php_include

1.信息收集题目&#xff1a;Web_php_include &#xff1a;PHP文件包含漏洞2.思路&#xff1a;1.代码审计&#xff1a;<?php show_source(__FILE__); echo $_GET[hello]; $page$_GET[page]; while (strstr($page, "php://")) { //在一个字符串中查…

cmake--CPack/deb

deb包的需求 怎么使用cmake把项目的依赖想打包为deb包,把项目的可执行文件和依赖文件打包为deb包,又怎么样配置apt源,让项目在jenkins构建之后,可以通过sudo apt install 下载deb包和安装到任意主机上? 整体流程概览 使用CMake构建项目:确保你的项目可以被CMake正确编译…

七十五、【Linux数据库】部署Redis服务 、 部署LNMP+Redis

Redis 与 LNMP 集成功能概述 Redis 核心功能 内存数据存储:高速读写性能 数据结构丰富:字符串、哈希、列表、集合等 持久化支持:RDB快照和AOF日志 发布订阅:消息队列功能 高可用:主从复制、哨兵模式、集群 LNMP+Redis 集成价值 会话共享:多Web服务器共享Session 数据缓存…

从YOLOv5到RKNN:零冲突转换YOLOv5模型至RK3588 NPU全指南

从YOLOv5到RKNN&#xff1a;零冲突转换YOLOv5模型至RK3588 NPU全指南 在嵌入式AI领域&#xff0c;将训练好的深度学习模型高效部署到边缘设备的NPU&#xff08;神经网络处理器&#xff09;上是提升性能的关键。本文将详细介绍如何在Ubuntu 20.04环境下&#xff0c;将YOLOv5l模型…

DNS的解析过程是怎样的?它基于传输层的什么协议?

问题DNS的解析过程是怎样的&#xff1f;它基于传输层的什么协议&#xff1f;我的回答&#xff1a;DNS解析过程是将域名转换为IP地址的一系列步骤。这个过程涉及多级缓存和查询&#xff1a;首先是浏览器缓存&#xff0c;浏览器会先检查自己的DNS缓存是否有记录。接着是操作系统缓…

模拟互联网大厂Java面试:电商场景下的技术探讨

模拟互联网大厂Java面试&#xff1a;电商场景下的技术探讨 场景概述 在这场模拟面试中&#xff0c;我们设定了一位互联网大厂的面试官与候选人小C之间的对话。面试官严肃专业&#xff0c;而小C则是搞笑的“水货程序员”。通过三轮问答&#xff0c;我们探索了Java技术栈在电商场…

遥感机器学习入门实战教程|Sklearn案例⑤:集成学习方法全览

在机器学习的实际应用中&#xff0c;单一分类器往往存在局限&#xff1a;比如决策树容易过拟合&#xff0c;kNN 对噪声敏感&#xff0c;逻辑回归在高维数据下收敛慢。为了提升整体效果&#xff0c;我们通常会采用 集成学习&#xff08;Ensemble Learning&#xff09;。 这篇文章…

大模型在垂直场景中的创新应用:搜索、推荐、营销与客服的新玩法

1. 引言 背景介绍:简述大模型(如GPT、BERT等)的发展历程及其在AI领域的核心作用,强调其在垂直场景中的潜力。 主题聚焦:说明本文将深入探讨搜索、推荐、营销、客服四大场景,分析大模型带来的创新开发方式。 目的与意义:阐述新玩法如何提升效率、增强用户体验,并推动行业…

华为仓颉语言的class(类)初步

华为仓颉语言的class&#xff08;类&#xff09;初步 class 概念 【官方文档 https://cangjie-lang.cn/docs?url%2F1.0.0%2Fuser_manual%2Fsource_zh_cn%2Fclass_and_interface%2Fclass.html 】 class 是仓颉面向对象体系的核心&#xff0c;用来描述“引用类型”对象。与 s…

健康常识查询系统|基于java和小程序的健康常识查询系统设计与实现(源码+数据库+文档)

健康常识查询系统 目录 基于java和小程序的健康常识查询系统设计与实现 一、前言 二、系统设计 三、系统功能设计 小程序功能设计 后台功能设计 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xf…

MySQL的高可用+MHA

即MySQL 主从复制高可用架构&#xff0c;是一套优秀的MySQL 高可用解决方案&#xff0c;由日本 DeNA 公司 youshimaton 开发&#xff0c;主要用于保障 MySQL 数据库在主服务器出现故障时&#xff0c;能快速进行主从切换&#xff0c;减少数据库服务中断时间。其核心特点包括&…