Python+Appium自动化完整教程

ops/2024/12/22 9:26:15/

前言

Appium是一款强大的开源自动化测试工具,专为移动应用设计。它支持原生、混合及移动Web应用的自动化测试,能在iOSAndroid平台上运行。通过简洁的API,用户可以轻松编写脚本模拟用户交互,实现界面测试的自动化,提高测试效率与质量。

Python作为任何人都可以掌握的脚本语言,以其简单易学著称,它与Appium相互搭配使用不仅可以对移动App自动化测试,亦可以编写机器人流程自动化脚本(rpa)。

本文我将以一个自动启动微信App的简单脚本示例,从安装环境到编写脚本代码来介绍Appium自动化的基本流程。

连夜肝完的教程,创作不易,如果喜欢请不要吝啬您发财的小手点赞+关注+收藏。

环境

本文主要介绍的是在windows操作系统下对移动app做自动化。需要的开发环境:

  • JDK: Java开发工具,建议1.8及以上版本
  • Python: 安装Python 3.x版本
  • Android SDK: 用来下载ADB工具,如果不是新手,可以直接下载ADB
  • 网易MuMu模拟器:用来连接ADB,模拟手机操作,也可以直接使用真机
  • Appium Server: 下载并安装最新版本的Appium服务器
  • Node.jsnpm: 用来安装Appimu ServerNode.js版本建议^14.17.0 || ^16.13.0 || >=18.0.0npm版本建议>=8
  • Appium Inspector: 用来在手机/模拟器上定位元素,获取坐标或者xpath。建议下载最新版本。
  • IDE: Pycharm

什么?要安装这么多东西,看样子要劝退不少人吧。其实没有那么难,我自己亲测有效,跟着本文一步一步操作你也可以跑通流程。

JDK

JDK的安装不是本文的重点,本文忽略安装细节,不会的可以移步参考章节。JDK安装好了以后记得配置JAVA_HOME环境变量

JAVA_HOME环境变量

Python

建议下载一个CondaConda是一个开源的包管理器和环境管理系统,支持在同一个操作系统下不同版本的Python环境切换,并且安装简单一键部署。如果只是想要一套Python环境,自己找一个Python安装包就可以了。

Conda有两种

  • Anaconda: 文件体积较大,包含了大量的科学计算和数据分析相关的预安装包,如NumPy、Pandas、SciPy、Matplotlib等。还包括了Jupyter Notebook、Spyder IDE等常用的科学计算工具。
  • Miniconda: 文件体积较小,只包含了Conda包管理器本身及其依赖项。

如果你想要一个开箱即用的环境,带有许多常用的数据科学工具,那么Anaconda可能更适合你。如果你希望从零开始构建环境,并且只安装所需的软件包,那么Miniconda会是更好的选择。

安装指导:Conda 安装文档
下载地址:Conda 下载地址

Conda环境变量

在系统环境变量PATH中添加环境变量,如下图所示:

Android SDK

安装指导:Android Studio 安装文档     Android Studio安装详细教程
下载地址:Android Studio 下载地址

安装过程比较简单,基本上是一路点 next,这里不做详细介绍,安装完以后下载Android SDK。打开Android Studio点左上角File>Settings>Edit

勾选SDK下载

命令行工具

命令行工具文档

勾选CMD Tools下载

ANDROID_HOME环境变量

  • ANDROID_HOME环境变量

  • PATH环境变量
%ANDROID_HOME%\platform-tools
%ANDROID_HOME%\cmdline-tools\latest\bin\

这里配置了环境变量就可以在任何地方使用adbsdkmanager等命令。

网易模拟器MuMu

为什么要使用网易的MuMu模拟器而不是用Android官方的模拟器?因为我自己亲测官方模拟器在PC上跑的反应速度不佳,更重要的是官方模拟器自带的是谷歌应用市场,下载安装APK体验不好,你懂得。

MuMu模拟器是网易为手游玩家量身定制的模拟器,性能肯定不用说,而且还支持模拟器的多开、手机远程控制等功能。

安装MuMu

MuMu 下载地址      安装方法很简单,不做详细介绍

安装好模拟器以后就可以双击MuMu模拟器或者MuMu多开器来启动模拟器。

adb连接MuMu

模拟器启动后,新建一个CMD命令行,输入命令查看模拟器运行情况。

adb devices

运行结果如下图,127.0.0.1:16384 device就是启动的模拟器,现在已经和adb建立了连接。

如果没有显示已启动的模拟器,可以执行命令连接。

adb connect 127.0.0.1:16384

运行结果如下图

如果不知道端口号是多少,可以在mumu模拟器多开器中查看。

安装APP

在模拟器中安装APP很简单,在顶部搜索栏输入你要安装的APP名称,点击下载按钮即可。

Appium

Appium分为服务端和客户端,Appium服务端主要负责与手机或模拟器通信,通过建立Session会话相互发送请求,同时Appium服务端还为Appium客户端提供RESTful API

Appium客户端是开发者用来编写自动化测试脚本的地方。Appium客户端会发送指令给服务端以此来控制手机或模拟器的行为。同时Appium客户端也会接收服务端返回的测试结果,并根据结果决定下一步的操作。

虽然Appium Server没有界面,但是Appium Inspector这个好用的工具已经从Appium Desktop中独立出来了,它可以定位UI元素,返回元素xpath,录制自动化流程并返回流程的脚本代码,可谓是让你的自动化开发变得非常傻瓜。本文后面在安装Appium Inspector的章节中会介绍到。

Node.jsNpm

在安装Appium Server之前,首先要确保自己的机器里有Node.jsNpm的环境。

Node.js 下载地址     下载一个安装文件一路点next即可。

Node.js环境变量

PATH环境变量里添加Node.js的安装路径即可。例如:

D:\software\nodejs\node16\

命令行输入如下命令,如果正确返回版本号表示安装成功。

node -v

因为Node.js自带Npm,所以可以输入如下命令查看Npm的版本。

npm -v

Appium Server

现在Appium官方已经不推荐使用Appium Desktop可视化工具了,因为它存在严重的安全隐患,而且官方已经不再迭代新的版本。所以这里我们使用npm命令安装无界面版本的Appium Server

安装Appium Server在命令行输入以下命令:

npm install -g appium

安装成功以后输入以下命令启动:

appium

启动成功如图所示:

http://127.0.0.1:4723这个地址就是服务端的地址,客户端到时候需要连这个地址与服务端通信。

安装UiAutomator2

UiAutomator2 是一个自动化驱动程序,它允许AppiumAndroid设备上的应用程序进行交互,特别是在 Android 5.0(API 级别 21)及以上版本中。

UiAutomator2 支持查找和操作 UI 元素、截图、手势操作和无障碍访问等。

安装UiAutomator2 执行以下命令:

appium driver install uiautomator2

如果安装成功会返回如下信息:

Attempting to find and install driver 'uiautomator2'
✔ Installing 'uiautomator2' using NPM install spec 'appium-uiautomator2-driver'
Driver uiautomator2@2.0.5 successfully installed
- automationName: UiAutomator2
- platformNames: ["Android"]

Appium Client

以上环境都安装好以后,就可以在Pycharm里写Python脚本了。不过在此之前,需要先在Python环境下安装Appium-Python-Client,执行以下命令:

python">pip install Appium-Python-Client

Python也用到了UiAutomator2,所以执行以下命令:

python">pip install --upgrade --pre uiautomator2
python -m uiautomator2 init

Python脚本如下:

python">import unittestfrom appium import webdriver
from appium.options.android import UiAutomator2Options
from appium.webdriver.common.appiumby import AppiumBycapabilities = dict(platformName='Android',automationName='uiautomator2',deviceName='2206123SC',# appPackage='com.tencent.mm',# appActivity='.ui.LauncherUI',# language='en',# locale='US'
)appium_server_url = 'http://127.0.0.1:4723'class TestAppium(unittest.TestCase):def setUp(self) -> None:self.driver = webdriver.Remote(appium_server_url, options=UiAutomator2Options().load_capabilities(capabilities))def tearDown(self) -> None:if self.driver:self.driver.quit()def test_find_el(self) -> None:xpath = "new UiSelector().text(\"WeChat\")"el = self.driver.find_element(by=AppiumBy.ANDROID_UIAUTOMATOR, value=xpath)el.click()if __name__ == '__main__':unittest.main()

到这里可能就有些看不懂了,我知道你很急,但是请你先别急。我们已经离成功不远了!

上面代码其实就做了两件事情:

  • 连接Appium远程服务器
  • 找到微信图标并点击它

代码很简单,但是有几个常量值是需要我们填的,这些常量值如何获取?

  • platformName
  • platformVersion
  • automationName
  • deviceName
  • appium_server_url
  • appPackage
  • appActivity
  • xpath

platformName声明用的什么系统,IOS还是Android,这里我们使用Android

platformVersion是安卓内核版本号,可以通过如下命令查看:

adb shell getprop ro.build.version.release

返回结果如下图所示:

automationName声明我们使用的UI驱动,这里我们使用前面已经安装过的uiautomator2

deviceName是设备的名称,我们可以通过adb devices -l命令得到它。

appium_server_urlappium服务端的远程地址,前面已经提到过。

appPackageAPP的包名,appActivityAPP的启动Activity。它们可以通过如下命令查看:

adb shell dumpsys activity | findstr "mFocus"# 以上命令如果不行可以试试以下命令
adb shell dumpsys activity | findstr "mResume"

我当前启动的是微信,返回结果如下图所示:

xpath是一种元素定位语言,有了它我们就可以定位到元素并给元素绑定事件了。如何得到xpath的值呢?这里我们就要使用到Appium Inspector这个工具了。除了Appium Inspector,类似的工具还有weditor以及uiautomatorviewer

xpath(XML Path Language,XML路径语言)是一种在XML文档中查找信息的语言。它被设计用来解决XML数据的定位问题,允许处理XML文档的程序通过提供的路径表达式来选取XML文档中的节点或节点集。XPath不仅用于XML,也被广泛应用于HTML文档的解析。

Appium Inspector

Appium InspectorAppium建立Session连接,Appiumadb通信,达到Appium Inspector控制模拟器的目的。

appium:这个前缀是自动加上的去,我们在配置的时候可以直接配置参数如automationName就可以了。

Capabilities这里的参数配置和我们Python代码里的是同一个配置。

以上配置完以后就可以点击Start Session按钮,启动Session之后的效果如图所示:

获取xpath的步骤如下图所示:

录制单击微信App图标事件。

切换到Recorder选项卡,复制刚才录制的流程的代码。

代码如下:

python">el2 = driver.find_element(by=AppiumBy.ANDROID_UIAUTOMATOR, value="new UiSelector().text(\"WeChat\")")
el2.click()

这段代码其实就是上文中Python脚本方法test_find_el()里的内容。

总结

本文旨在引导初学者逐步搭建起一套完整的Appium自动化测试环境,并通过具体的示例代码来演示自动化测试脚本的编写过程。环境要求主要有:

  • JDK
  • PYTHON
  • Android SDK
  • 网易MuMu模拟器
  • Appium服务
  • Appium客户端
  • Appium Inspector

本文向大家介绍了以上各个环境的作用及其安装与使用方法。Appium的通信流向:

参考

Appium 快速入门介绍

Python+Appium实现自动化测试(附教程+源码)

app自动化中 - 三大元素定位工具

Python + Appium 自动化操作微信入门看这一篇就够了

MuMu模拟器12如何连接adb?

使用 uiautomatorviewer 获取元素的定位信息

appium-inspector 下载

Android Studio 下载

Conda 安装

Conda 下载


http://www.ppmy.cn/ops/118259.html

相关文章

复杂网络(Complex Network)社团数据可视化分析(gephi)实验

Experiment Report of complex network course 复杂网络实验报告 目录 Experiment Report of complex network course 复杂网络实验报告 实验目标(The objective of the experiment): 实验流程(The flow of the experiment&a…

Bug:ThreadPoolTaskScheduler搭配CronTask完成定时任务,关闭scheduler后CronTask任务仍然执行?

【问题】执行下面代码后,关闭ThreadPoolTaskScheduler,CronTask仍然继续执行。 Configuration public class config {Beanpublic String getString() throws InterruptedException {Runnable runnable () -> {try {System.out.println("hello r…

Nisshinbo日清纺pvs1114太阳模拟器手测

Nisshinbo日清纺pvs1114太阳模拟器手测

leetcode第169题:多数元素

给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。 示例 1: 输入:nums [3,2,3] 输出:3 示例 …

Loki 与 ELK 是两种常见的日志系统搭建方案对比

Loki 与 ELK 是两种常见的日志系统搭建方案,它们都有各自的优势和适用场景。让我们通过对比 Loki 和 ELK(Elasticsearch、Logstash、Kibana)在不同维度上的表现来分析它们的优缺点,并讨论它们的使用场景。 1. 架构对比 Loki Gr…

YOLOv10改进,YOLOv10主干网络替换为VanillaNet( CVPR 2023 华为提出的全新轻量化架构),大幅度涨点

摘要 基础模型的核心理念是“更多即不同”,这一理念在计算机视觉和自然语言处理领域取得了惊人的成功。然而,变压器模型的优化挑战和固有复杂性呼唤一种向简化转变的范式。在本研究中,引入了 VanillaNet,一种拥抱设计优雅的神经网络架构。通过避免高深度、快捷方式和复杂操…

大语言模型知识点分享

1 目前主流的开源模型体系有哪些? Prefix Decoder 系列模型 核心点: 输入采用双向注意力机制,输出为单向注意力。双向注意力意味着输入的每个部分都可以关注到输入的所有其他部分,这在理解上下文时具有很强的优势。 代表模型&a…

关于区块链的安全和隐私

背景 区块链技术在近年来发展迅速,被认为是安全计算的突破,但其安全和隐私问题在不同应用中的部署仍处于争论焦点。 目的 对区块链的安全和隐私进行全面综述,帮助读者深入了解区块链的相关概念、属性、技术和系统。 结构 首先介绍区块链…