Python+Appium编写脚本

一、环境配置

1、安装JDK,版本1.8以上

2、安装Python,版本3.x以上,用来解释python

3、安装node.js,版本^14.17.0 || ^16.13.0 || >=18.0.0,用来安装Appimu Server

4、安装npm,版本>=8,用来安装Appimu Server

5、安装Android SDK,用来下载ADB工具

6、安装Appium Inspector,用来在手机/模拟器上定位元素

7、IDE: Pycharm

注意:app自动化测试,元素定位工具有:

(1)appium自带的Appium Inspector工具

(2)python版uiautomator2中的weditor

(3)Android SDK自带UI Automator Viewer,uiautomatorviewer.bat,Android API 高版本已经移除这个了

选择一款即可,代码可以自己在Pycharm中编写,也可以用元素定位工具录制点击生成代码。

配置好环境变量之后可以查询一下各个工具的版本

需要的安装包:

通过百度网盘分享的文件:appium+python
链接:https://pan.baidu.com/s/1YLkx7za-qfojT3o0gx2vIw?pwd=ig8h 
提取码:ig8h

二、Appium

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

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

        Appium Server没有界面,但是有Appium Inspector,这个工具已经从Appium Desktop中独立出来了,它可以定位UI元素,返回元素xpath,录制自动化流程并返回流程的脚本代码,Appium 1版本是Appium Desktop的这种,Appium 2 直接就使用包管理器安装Appium Server,Appium官方已经不推荐使用Appium Desktop可视化工具了,因为它存在严重的安全隐患,而且官方已经不再迭代新的版本。2022 年 1 月 1 日起,Appium 团队不再维护或支持 Appium 1。所以本次用npm命令安装无界面版本的Appium Server。

        在启动Appium服务器之前,需要安装必要的依赖工具,如Android SDK(用于Android应用测试)或Xcode(用于iOS应用测试)。

1、配置Android环境

测试Android应用,需要配置Android SDK。Android 移动应用开发者工具 – Android 开发者  |  Android Developers 官网下载Android Studio或者直接下载Android SDK包,然后配置环境变量ANDROID_HOME和PATH,确保系统可以找到Android SDK工具。

以下是Android Studio里面使用SDK Manager安装SDK相关,安装路径不要有空格

命令行工具也可也安装上

配置系统变量

如果上述的步骤全部完成,则Android SDK的环境已经搭建完成了,这里主要是通过配置系统变量,以便于可以直接在命令行操作Android SDK包中的各种工具。

1、打开系统控制面板->高级系统属性->环境变量

2、新增变量ANDROID_HOME=D:\Program Files\sdk

3、更新PATH变量,新增

%ANDROID_HOME%\build-tools\35.0.0

%ANDROID_HOME%\emulator

%ANDROID_HOME%\platform-tools

%ANDROID_HOME%\cmdline-tools\latest\bin\ (如果也安装了命令行工具多加一个这个)

4、若命令行运行某命令报错“不是内部或外部命令”,也是采用这样的方式将其加入到PATH中

5、打开命令行工具,输入命令“adb --version”,可查看adb版本和adb的安装目录

安装appium-inspector,官网:https://github.com/appium/appium-inspector

2、配置iOS环境

如果你要测试iOS应用,需要安装Xcode,并确保安装了Xcode命令行工具。可以通过以下命令安装Xcode命令行工具:

xcode-select --install

3、安装Appium

3.1、安装Appium服务器

使用Node.js的npm工具来安装Appium服务器

npm install -g appium

3.2、安装UiAutomator2

appium driver install uiautomator2

3.2、安装Appium Python客户端库

pip install Appium-Python-Client

如果不用appium自带的appium inspector元素定位工具,也可以用Python版UiAutomator2中的weditor,可以执行以下命令:

pip install weditor

pip install --upgrade uiautomator2

python -m uiautomator2 init

命令行运行weditor --help确认是否安装成功

命令行输入:weditor 会自动打开一个浏览器

3.4、启动Appium服务器

appium

3.5、连接真机或者模拟器测试

我这里用的是真机,模拟器夜神,MuMu或者其他的都可以

打开开发者模式,USB线连接手机和电脑,并且在开发者选项当中,开启USB调试

查询设备信息和安卓版本:adb devices ,adb shell getprop ro.build.version.release

查询当前活跃的程序:adb shell dumpsys activity | findstr "mResume"(需先打开手机应用)

注:Android 8.1之前用adb shell dumpsys activity | findstr “mFocus”

我这里打开QQ音乐,把相关环境信息填写好

capabilities = dict(platformName='Android',# 操作系统platformVersion='10',# Android内核版本号automationName='uiautomator2',deviceName='MQS0219C16009039', #设备名称uiautomator2ServerInstallTimeout=60000,appPackage='com.tencent.qqmusic', #应用程序包的标识符appActivity='.activity.AppStarterActivity', #主要应用活动的名称noReset=True,  #确保自动化之后不重置app,保留 session 信息,可以避免重新登录unicodeKeyboard=True,  # 使用 unicodeKeyboard 的编码方式来发送字符串resetKeyboard=True,  # 将键盘给隐藏起来language='en',locale='US'
)

代码可以用Pycharm写,然后启动xx.py脚本,也可以直接在Appium Inspector中填写信息启动会话

启动后会在手机上安装一个Appium Setting和两个uiautomator2.server的应用

启动会话如果报错:UnknownError: An unknown server-side error occurred while processing the command. Original error: Error executing adbExec. Original error: ‘Command ‘D:\AndroidSdk\platform-tools\adb.exe -P 5037 -s MQS0219C16009039 install -r C:\Users\admin\.appium\node_modules\appium-uiautomator2-driver\node_modules\appium-uiautomator2-server\apks\appium-uiautomator2-server-debug-androidTest.apk’ timed out after 20000ms’. Try to increase the 20000ms adb execution timeout represented by ‘uiautomator2ServerInstallTimeout’ capability

可以手动安装这两个包,在报错的目录下去安装

在这里cmd执行安装adb install命令,会让你在手机上安装

adb install .\appium-uiautomator2-server-debug-androidTest.apk

adb install .\appium-uiautomator2-server-v7.1.1.apk

然后就可以了

三、编写脚本

1、导入必要的库

在编写测试脚本之前,需要导入Appium Python客户端库和其他必要的库:

import unittestfrom appium import webdriver
from appium.options.android import UiAutomator2Options
from appium.webdriver.common.appiumby import AppiumBy


2、设置Capabilities

Capabilities是一个字典,用于告诉Appium服务器你希望如何设置测试环境。以下是一个示例,展示了如何设置Android和iOS的Capabilities:

capabilities = dict(platformName='Android',# 操作系统platformVersion='10',# Android内核版本号automationName='uiautomator2',deviceName='MQS0219C16009039', #设备名称uiautomator2ServerInstallTimeout=60000,appPackage='com.tencent.qqmusic', #应用程序包的标识符appActivity='.activity.AppStarterActivity', #主要应用活动的名称noReset="true",  #确保自动化之后不重置app,保留 session 信息,可以避免重新登录unicodeKeyboard="True",  # 使用 unicodeKeyboard 的编码方式来发送字符串resetKeyboard="True",  # 将键盘给隐藏起来language='en',locale='US'
)


3、初始化Appium WebDriver

使用上述Capabilities初始化Appium WebDriver:

driver = webdriver.Remote('http://localhost:4723/wd/hub', capabilities)


4、编写测试步骤

在初始化WebDriver之后,可以开始编写具体的测试步骤。以下示例展示了如何在Android应用中查找元素并进行交互:

# 等待应用加载time.sleep(5)查找元素并进行交互element = driver.find_element(by=AppiumBy.ACCESSIBILITY_ID, value="QQ音乐")
element.click()其他测试步骤...

5、结束测试

在测试结束时,记得关闭WebDriver会话:

driver.quit()

四、执行和调试

在编写完测试脚本之后,可以通过运行Python脚本来执行测试。在运行过程中,可以通过观察Appium服务器日志和测试脚本输出来调试和优化测试。

1、运行测试脚本

python your_test_script.py


2、调试测试脚本

如果测试脚本出现错误,可以通过以下几种方法进行调试:

查看Appium服务器日志:Appium服务器会输出详细的日志信息,可以通过这些日志来分析和定位问题。

使用断点调试:使用Python的调试工具(如PDB)在代码中设置断点,逐步执行代码,观察变量值和执行过程。

增加日志输出:在测试脚本中添加更多的日志输出,帮助你了解代码的执行过程和状态。

说明:

安装必要的环境,jdk,sdk,apppium的服务端和客户端等,以及任意一种元素定位工具,然后编码可以在编辑器里面编码,也可以用元素定位器去录制生成代码。

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

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

相关文章

WPF MVVM入门系列教程(三、数据绑定)

本文主要介绍WPF的数据绑定(Data Binding)功能,如果你已经熟悉本文的内容,可以跳过并直接阅读后面的文章。 什么是数据绑定 我们先来看一下MSDN上的说明: 数据绑定是在应用 UI 与其显示的数据之间建立连接的过程。 如…

关于Dell r730xd 老服务器的阵列卡 配置系统盘RAID 1

这里写自定义目录标题 关于Dell r730xd 老服务器的阵列卡 配置系统盘RAID 1操作步骤 关于Dell r730xd 老服务器的阵列卡 配置系统盘RAID 1 操作步骤 -开机后 按 Ctrl R 进入 RAID卡 配置界面,如下:-下面图片是 服务器中硬盘都已经准备好,并…

Qt Udp的组播(多播)、广播和单播

UDP通讯的基本概念和特点‌ UDP(User Datagram Protocol,用户数据报协议)是‌TCP/IP协议族中的一种无连接协议,主要用于那些对实时性要求较高而可靠性要求较低的应用场景。UDP的主要特点包括: ‌无连接‌:…

算法每日双题精讲——双指针(快乐数,盛最多水的容器)

🌟快来参与讨论💬,点赞👍、收藏⭐、分享📤,共创活力社区。 🌟 别再犹豫了!快来订阅我们的算法每日双题精讲专栏,一起踏上算法学习的精彩之旅吧!💪…

C语言 | Leetcode C语言题解之第551题学生出勤记录I

题目&#xff1a; 题解&#xff1a; bool checkRecord(char* s) {int absents 0, lates 0;int n strlen(s);for (int i 0; i < n; i) {char c s[i];if (c A) {absents;if (absents > 2) {return false;}}if (c L) {lates;if (lates > 3) {return false;}} els…

【未解决】vite反向代理问题

文章目录 可行网页直接访问&#xff0c;数据正常返回不使用反向代理&#xff0c;直接用axios可以得到数据postman测试也正常 不行-vite反向代理出问题case1命令行测试 可行 网页直接访问&#xff0c;数据正常返回 在地址栏输入 https://api.binance.com/api/v3/ticker/price?…

github使用基础

要通过终端绑定GitHub账号并进行文件传输&#xff0c;你需要使用Git和SSH密钥来实现安全连接和操作。以下是一个基本流程&#xff1a; 设置GitHub和SSH 检查Git安装 通过终端输入以下命令查看是否安装Git&#xff1a; bash 复制代码 git --version配置Git用户名和邮箱 bash …

9_api_intro_imagerecognition_ocr2word

通用图片 OCR 到 Word API 数据接口 高可用图像识别引擎&#xff0c;基于机器学习&#xff0c;超精准识别率。 1. 产品功能 通用的识别接口&#xff0c; 支持多种图片格式&#xff1b;支持中英文字符混合识别&#xff1b;支持 Base64 以及网络地址传参&#xff1b;基于机器学习…

深度优先搜索之全排列问题(C语言版)

本文的一些参考&#xff1a; DFS (深度优先搜索) 算法详解 模板 例题&#xff0c;这一篇就够了_dfs算法-CSDN博客 首先把深度优先搜索算法的基本概论摆出来 深度优先搜索算法&#xff08;Depth First Search&#xff0c;简称DFS&#xff09;&#xff1a; 一种用于遍历或搜…

如何防止苹果MacOS进入休眠状态

前言 远程控制的时候&#xff0c;发现MacOS已经进入了休眠状态。如何设置MacOS&#xff0c;防止其进入休眠状态&#xff0c;这样才能远程控制。 1、进入系统偏好设置 显示器自动关闭了不要紧。只要操作系统不进入休眠就可以。

云计算:定义、类型及对企业的影响

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 云计算&#xff1a;定义、类型及对企业的影响 云计算&#xff1a;定义、类型及对企业的影响 云计算&#xff1a;定义、类型及对企…

Pr 视频过渡:沉浸式视频

效果面板/视频过渡/沉浸式视频 Video Transitions/Immersive Video Adobe Premiere Pro 的视频过渡效果中&#xff0c;沉浸式视频 Immersive Video效果组主要用于 VR 视频剪辑之间的过渡。 自动 VR 属性 Auto VR Properties是所有 VR 视频过渡效果的通用选项。 默认勾选&#x…

ArcGIS Pro SDK Addin-DAML

ArcGIS Pro SDK Addin-DAML 文章目录 ArcGIS Pro SDK Addin-DAML1 Panes: 重置窗格2 Button: 从功能区中移除核心按钮3 Button: 将新按钮插入功能区上的现有组4 Menu: 在图层上下文菜单中插入一个新按钮5 Menu: 在 Map Container 上下文菜单中插入新菜单6 Menu: 在2D Map上下文…

【电机控制器】STC8H1K芯片——ADC电压采集

【电机控制器】STC8H1K芯片——ADC电压采集 文章目录 [TOC](文章目录) 前言一、ADC1.ADC初始化1.ADC_CONTR2.ADCCFG3.ADCTIM4.代码 2.ADC读取1.ADC_RES、ADC_RESL2.代码 3.VREF电压读取——MCU工作电压1.MCU工作电压计算公式2.代码 4.ADC被转换通道的输入电压读取1.ADC被转换通…

SpringBoot基础系列学习(三):日志

文章目录 一丶日志控制台介绍二丶日志的用法三丶日志级别四丶配置文件参数及介绍五丶slf4j 一丶日志控制台介绍 只要引用了spring-boot-starter依赖,就无需引入日志依赖,里面自带了logging依赖,默认情况下,springBoot使用Logback来记录日志,并用INFO级别输出到控制台 二丶日…

鸿蒙系统:安卓与iOS的强劲对手

随着科技的迅猛发展&#xff0c;“纯血鸿蒙”系统HarmonyOS Next 5.0系统的推出引起了业界的广泛关注。用户们对这一新系统充满好奇&#xff0c;急切地想要体验其带来的变革。鸿蒙系统以其创新的设计和技术支持&#xff0c;成为与安卓和iOS并列的第三大操作系统。 鸿蒙系统的独…

Redis - 哨兵(Sentinel)

Redis 的主从复制模式下&#xff0c;⼀旦主节点由于故障不能提供服务&#xff0c;需要⼈⼯进⾏主从切换&#xff0c;同时⼤量 的客⼾端需要被通知切换到新的主节点上&#xff0c;对于上了⼀定规模的应⽤来说&#xff0c;这种⽅案是⽆法接受的&#xff0c; 于是Redis从2.8开始提…

Golang | Leetcode Golang题解之第552题学生出勤记录II

题目&#xff1a; 题解&#xff1a; const mod int 1e9 7type matrix [6][6]intfunc (a matrix) mul(b matrix) matrix {c : matrix{}for i, row : range a {for j : range b[0] {for k, v : range row {c[i][j] (c[i][j] v*b[k][j]) % mod}}}return c }func (a matrix) p…

放电电阻是什么

放电电阻&#xff0c;顾名思义&#xff0c;就是用于放电的电阻。在电路中&#xff0c;当电流突然增大时&#xff0c;如果没有适当的电阻来限制电流&#xff0c;就可能导致电路损坏。因此&#xff0c;放电电阻的作用就是在电路中起到限制电流的作用&#xff0c;防止电路因电流过…

CelebV-Text——从文本生成人脸视频的数据集

概述 近年来&#xff0c;生成模型在根据文本生成和编辑视频方面受到了广泛关注。然而&#xff0c;由于缺乏合适的数据集&#xff0c;生成人脸视频领域仍然是一个挑战。特别是&#xff0c;生成的视频帧质量较低&#xff0c;与输入文本的相关性较弱。在本文中&#xff0c;我们通…