python+appium+雷电模拟器安卓自动化及踩坑

news2024/11/24 6:53:11

一、环境安装

环境:window11

1.1 安装Android SDK

AndroidDevTools - Android开发工具 Android SDK下载 Android Studio下载 Gradle下载 SDK Tools下载

这里面任选一个就可以,最终下载完主要要安装操作安卓的工具adb,安装这个步骤的前提是要安装jdk8,其他版本我试了不行,就使用jdk8即可,jdk8的安装不赘述:

通过sdk manager安装最新的安卓依赖

最终保证相关依赖正常安装,并配置环境变量:

ANDROID_HOME=D:\software\android-sdk-windows变量及值(SDK的安装目录)

把platform-tools及tools添加到系统环境变量,变量值(路径)之间使用分号隔开,两个变量值分别为:%ANDROID_HOME%\platform-tools;%ANDROID_HOME%\tools;

1.2 安装appium:

https://github.com/appium/appium-desktop/releases

直接安装最新的appium的desktop版本,这个直接安装即可:

1.3 安装雷电模拟器:

直接安装最新的雷电模拟器即可,但此处需要把adb.exe替换雷电模拟器下的adb.exe,可以先把雷电模拟器下的重命名:

1.4 python3环境appium依赖

直接安装pip install appium-python-client 这个一般是最新版本的appium:

也可以指定低版本的appium 

pip install appium-python-client==2.0,这里面坑来了,这个之后再补充,不同版本的appium使用不一样

二、启动环境:

2.1 启动雷电模拟器后:

查看是否可以正常连接

2.2 启动appium

安装完成后直接start即可,但这里面有个坑,也就是到时候运行python时会有,里面包含这种错误,这个就需要启动appium时以管理员身份启动,来解决这个问题,当然前提是配置了安卓的环境变量:

An unknown server-side error occurred while processing the command. Original error: Neither ANDROID_HOME nor ANDROID_SDK_ROOT environment variable was exported

三、python代码调用目标包

3.1 低版本启动方式

也就是appium-python-client==2.0版本,如果你装的是最新版本而使用下面的调用方式,就会报 AttributeError: 'NoneType' object has no attribute 'to_capabilities' 这种错误,也就是调用方式存在问题:

 
from appium import webdriver
desired_caps = {
  "platformName": "Android",
  "platformVersion": "10",
  "deviceName": "Q5X7N19605002672",
  "appPackage": "tv.danmaku.bili",
  "appActivity": ".MainActivityV2",
  "unicodeKeyboard": True,
  "resetKeyboard":True,
  'noReset': True,
  "appium:newCommandTimeout": 6000,
  "appium:automationName": "UiAutomator2"
}
 
if desired_caps is not None:
    driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
else:
    raise ValueError("desired_caps must not be None")
3.2 最新版本调用方式:

如果你使用的是appium-python-client==4.0版本以上

from appium import webdriver
from appium.options.android import UiAutomator2Options

# Appium Desired Capabilities
desired_caps = {
    "platformName": "Android",
    "platformVersion": "10",
    "deviceName": "emulator-5554",
    "appPackage": "com.android.contacts",
    "appActivity": ".activities.PeopleActivity",
    "unicodeKeyboard": True,
    "resetKeyboard": True,
    'noReset': True,
    "appium:newCommandTimeout": 6000,
    "appium:automationName": "UiAutomator2"
}

if desired_caps is not None:
    driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',
                              options=UiAutomator2Options().load_capabilities(desired_caps))
else:
    raise ValueError("desired_caps must not be None")

运行则会直接打开对应的服务,当然这里面还有个坑,运行报:

Unable to find an active device or emulator with OS 10. The following are available: emulator-5554 (9)

这个其实是参数使用的os版本设置不对"platformVersion": "9",只需要改这段代码即可,到此可以正常运行:

3.3 更改查看apk包命令

通过下面命令查看当前运行的服务包,替换代码中的实际包即可,到此环境整体流程结束:

adb shell dumpsys activity | findstr "mResume" 

adb shell dumpsys activity | findstr "mFocus"

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

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

相关文章

MarsCode--字符串有多少种可能性【简单】

问题描述 给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数&#x…

[翻译]MOSIP Blue Book

目录 Preface(前言) Executive summary(执行摘要) 1 Introduction(介绍/序言) 1.1 Principles on Identification(识别原则) 1.2 Need for a Foundational ID(需要基…

【Java进阶】Java进阶-手撕java agent

文章目录 Java Agent一、定义与工作原理二、主要特点三、应用场景四、使用注意事项 Java Agent相关接口1. Instrumentation接口2. ClassFileTransformer接口3. 其他相关类和接口 手写一个Java Agent1. 编写Java Agent代码2. 编写MANIFEST.MF文件3. 编译代码并打包成JAR文件4. 运…

JavaWeb——Maven(2/8):概述-介绍安装(步骤、具体操作、测试)

目录 介绍 安装 步驟 具体操作 测试 主要讲解两个方面:Maven的介绍以及Maven的安装。 先来介绍一下没问当中的一些概念和模型。 介绍 Apache Maven是一个项目管理和构建工具,它基于项目对象模型(POM:project object model…

Java | Leetcode Java题解之第477题汉明距离总和

题目&#xff1a; 题解&#xff1a; class Solution {public int totalHammingDistance(int[] nums) {int ans 0, n nums.length;for (int i 0; i < 30; i) {int c 0;for (int val : nums) {c (val >> i) & 1;}ans c * (n - c);}return ans;} }

基于Flink+Hologres搭建实时数仓

Apache Paimon是一种流批统一的数据湖存储格式&#xff0c;结合Flink及Spark构建流批处理的实时湖仓一体架构。Paimon创新地将湖格式与LSM技术结合起来&#xff0c;给数据湖带来了实时流更新以及完整的流处理能力。借助实时计算Flink版与Apache Paimon&#xff0c;可以快速地在…

多人播客的生成#使用OpenAI Swarm框架

使用Swarm来写多智能体的代码&#xff0c;非常简洁高效。 什么是Swarm&#xff1f; Swarm是由OpenAI开发的一个实验性多代理系统框架&#xff0c;旨在探索多代理系统的高效接口。该框架注重轻量级、可控性高且易于测试&#xff0c;主要用于展示代理之间的交接与例行操作模式。S…

多智能体协同太复杂?OpenAI Swarm让问题迎刃而解

OpenAI Solutions团队最新推出的实验性框架Swarm正在为AI领域带来新的可能性。这个专为构建、编排和部署多智能体系统而生的轻量级工具集&#xff0c;正在改变我们处理复杂任务的方式。 Swarm框架的核心理念是让多个AI代理&#xff08;Agent&#xff09;协同工作&#xff0c;每…

基于SSM+Vue+MySQL的少儿编程网上报名系统

系统展示 用户前台界面 管理员后台界面 系统背景 在当下&#xff0c;随着国家对教育的重视以及教育部门对教育改革的不断推进&#xff0c;少儿编程教育逐渐成为了一个热门领域。传统的少儿编程报名方式往往依赖于线下填写纸质表格或电话报名&#xff0c;这种方式不仅效率低下&a…

群晖使用frpc连接qbittorrent时会出现Unauthorized

跨域问题&#xff1a; 如果你是通过不同的网络或子网访问 qBittorrent Web UI&#xff0c;可能会引发跨域问题。尝试在 qBittorrent.conf 中添加以下设置&#xff0c;允许跨域访问&#xff1a; find / -name qBittorrent.conf WebUI\HostHeaderValidationfalse 成功

【机器人数值优化】数值优化基础(一)从理论到实战全方位指南 | 解锁机器人技术的核心技能

&#x1f4af; 欢迎光临清流君的博客小天地&#xff0c;这里是我分享技术与心得的温馨角落 &#x1f4af; &#x1f525; 个人主页:【清流君】&#x1f525; &#x1f4da; 系列专栏: 运动控制 | 决策规划 | 机器人数值优化 &#x1f4da; &#x1f31f;始终保持好奇心&…

一文简述工程项目管理中的最常见概念

蓝燕云https://www.lanyancloud.com/致力于为工程行业中各类企业和组织提供专业、简单、可靠的工程项目管理系统&#xff0c;专注于提升企业对于项目管理中成本、进度、质量、安全、资料等全场景管理能力。 01 怎么理解工程项目管理&#xff1f; 建设工程项目管理指的是专业…

神经网络模型的“扩散与进化”思想启迪

在上一篇笔记「上交大全华班复现o1旅程式学习下的深思考」中&#xff0c;其中对于上交大提出的旅程学习即system2慢思考认知范式下对于“多步骤的隐式到显式空间状态映射下的细粒度联合概率分布建模”的描述隐喻为“社会心理学或社会经济学两种不同的长程动态系统慢演化现象”。…

Java之lambda

目录 lambda 引入 语法 函数式接口 lambda表达式的使用 语法精简&#xff1a; 代码示例&#xff1a; 变量捕获 局部变量捕获 成员变量捕获 lambda在集合中的使用 lambda的优缺点 lambda 引入 Lambda表达式是Java SE 8中一个重要的新特性。lambda表达式允许你通过表…

设计模式-原型模式(克隆、Clone、Prototype)

原型模式&#xff08;克隆、Clone、Prototype&#xff09;是一种创建型设计模式&#xff0c; 使你能够复制已有对象&#xff0c; 而又无需使代码依赖它们所属的类。 问题 譬如美国研制了一种特效药&#xff0c;而且还在专利保护器内&#xff0c;而印度制药公司看中了&#xff0…

常见开源组件的详解

文章目录 RPCRPC架构和工作流程为什么有了HTTP还要用RPC底层协议数据格式连接管理错误处理 使用场景常见的RPC框架 Web应用框架主要功能常见的Web应用框架Spring Boot (Java)Django (Python)Express.js (Node.js) Redis主要特点应用场景缓存问题Redis集群架构主从复制Redis Clu…

【算法】笨小猴

[NOIP2008]笨小猴_牛客题霸_牛客网 【描述】 eg1中&#xff0c;输入“error” “e”出现了1次&#xff0c;“r”出现了3次&#xff0c;“o”出现了1次 最大是3&#xff0c;最小是1&#xff0c;3-12&#xff0c;2是质数&#xff0c;所以输出“Lucky word”和这个单词 eg2中&…

【Oracle数据库进阶】003.SQL基础查询_增、删、改数据

课 程 推 荐我 的 个 人 主 页&#xff1a;&#x1f449;&#x1f449; 失心疯的个人主页 &#x1f448;&#x1f448;入 门 教 程 推 荐 &#xff1a;&#x1f449;&#x1f449; Python零基础入门教程合集 &#x1f448;&#x1f448;虚 拟 环 境 搭 建 &#xff1a;&#x1…

【基于ARM深入分析C程序】1--ARM架构与汇编、分析C语句`a++`的执行过程

【基于ARM深入分析C程序】1–ARM架构与汇编、分析C语句a的执行过程 文章目录 【基于ARM深入分析C程序】1--ARM架构与汇编、分析C语句a的执行过程一、3个操作指令二、CPU是怎么知道执行这三条操作指令的&#xff1f;2.1 CPU的架构 2.2 寄存器 本文作为学习笔记&#xff0c;围绕的…

【ARM】v8架构programmer guide(6)_MMU内存管理模块

快进到内存管理模块吧&#xff0c;其他的后面再补充~ 目录 1.1 TLB (Translation Lookaside Buffer) 1.2 Kernel 和 Application 虚拟地址空间 1.3 转换虚拟地址到物理地址 1.3.1 安全和非安全地址空间 1.3.2 配置和使能MMU 1.3.3 当MMU没有使能的时候 1.4 ARMv8-A的页…