Python之Appium 2自动化测试(Android篇)

一、环境搭建及准备工作

1、Appium 2 环境搭建

  • 请参考另一篇文章: Windows系统搭建Appium 2 和 Appium Inspector 环境

2、安装 Appium-Python-Client,版本要求3.0及以上

pip install Appium-Python-ClientVersion: 3.1.0

3、手机连接电脑,并在dos窗口启动 Appium Server
在这里插入图片描述

4、演示环境APP软件:ES文件浏览器

5、查看元素唯一方法

  • 复制id,点击搜索图标
    在这里插入图片描述
  • 选择id,粘贴内容,点击Search

在这里插入图片描述

  • 唯一

在这里插入图片描述

  • 不唯一

在这里插入图片描述


二、编写自动化脚本

from appium import webdriver
from appium.options.common.base import AppiumOptions
from appium.webdriver.common.appiumby import AppiumBydef create_driver():"""AppiumOptions():用于配置 Appium 测试的通用选项,可用于 Android 和 iOS 平台可以设置通用的测试选项,如平台名称、版本、自动化引擎等"""# 创建 AppiumOptions 对象options = AppiumOptions()# 加载测试的配置选项和参数(Capabilities配置)options.load_capabilities({# 自动化测试的引擎"automationName": "uiautomator2",# 平台名称"platformName": "Android",# 系统版本"platformVersion": "11",# 设备的名称"deviceName": "RK3399",# 待测试应用的包名"appPackage": "com.estrongs.android.pop",# 待测试应用的活动(Activity)名称"appActivity": ".app.openscreenad.NewSplashActivity",# 设置使用 Unicode 编码方式发送字符串到设备的键盘"unicodeKeyboard": "true",# 设置重置设备的软键盘状态并隐藏键盘"restKeyboard": "true"})# Appium服务器地址端口,本地用http://127.0.0.1:4723appium_host = 'http://192.168.100.15:4723'return webdriver.Remote(appium_host, options=options)def close_driver(driver):"""关闭驱动"""if driver:driver.quit()if __name__ == "__main__":driver = create_driver()# 设置隐式等待时间为10秒driver.implicitly_wait(10)# 元素定位代码...# 关闭驱动close_driver(driver)

三、元素定位方式

1、根据id定位

# ID 定位方法
el = driver.find_element(AppiumBy.ID, "com.estrongs.android.pop:id/txt_grant")
el.click()

在这里插入图片描述

2、根据xpath定位

# xpath 方法
el1 = driver.find_element(AppiumBy.XPATH, '//android.widget.TextView[@resource-id="android:id/title" and @text="密码设置"]')
el1.click()# xpath 简写方法
el2 = driver.find_element(AppiumBy.XPATH, '//*[@text="密码设置"]')
el2.click()

在这里插入图片描述

3、根据class定位 (建议少用,重复名称较多)

# 使用class name定位
el3 = driver.find_element(AppiumBy.CLASS_NAME, "android.widget.ImageButton")
el3.click()

在这里插入图片描述

4、根据Accessibility ID定位

# 使用Accessibility ID定位
el4 = driver.find_element(AppiumBy.ACCESSIBILITY_ID, '转到上一层级')
el4.click()

在这里插入图片描述

5、根据UIAutomator定位

  • UIAutomator元素定位是 Android 系统原生支持的定位方式,虽然与 xpath 类似,但比它更加好用,且支持元素全部属性定位.定位原理是通过android 自带的android uiautomator的类库去查找元素。 Appium元素定位方法其实也是基于Uiautomator来进行封装的。
# 使用UIAutomator定位元素 (id定位)
el5 = driver.find_element(AppiumBy.ANDROID_UIAUTOMATOR, 'new UiSelector().resourceId("com.estrongs.android.pop:id/txt_grant")')
el5.click()# 使用UIAutomator定位元素 (test定位)
el6 = driver.find_element(AppiumBy.ANDROID_UIAUTOMATOR, 'new UiSelector().text("搜索")')
el6.click()# 使用UIAutomator定位元素 (class name定位)
el7 = driver.find_element(AppiumBy.ANDROID_UIAUTOMATOR, 'new UiSelector().className("android.widget.ImageButton")')
el7.click()

6、相同元素定位
在这里插入图片描述
在这里插入图片描述
如上图,三个输入框的class属性都是一样的,如果要根据class属性分别来获取这三个值,就使用driver.find_elements方式。代码实现如下(注意 driver.find_elements 多个 s):

# 使用class name和索引定位,查找的元素列表中的特定元素
el8 = driver.find_elements(AppiumBy.CLASS_NAME, "android.widget.EditText")
# 输入邮箱
el8[0].send_keys("123456789@qq.com")
# 输入验证码
el8[1].send_keys("654321")
# 输入密码
el8[2].send_keys("123456")

四、点击 - 输入 - 清空操作

# 运行ES文件浏览器软件,并点击同意
el = driver.find_element(AppiumBy.ID, "com.estrongs.android.pop:id/txt_grant")
el.click()# 单机操作(相当于鼠标点击):click()
el1 = driver.find_element(AppiumBy.XPATH, '//*[@text="搜索"]')
el1.click()# 输入:send_keys()
el2 = driver.find_element(AppiumBy.CLASS_NAME, "android.widget.EditText")
el2.send_keys("Android自动化")# 清空: clear()
el3 = driver.find_element(AppiumBy.CLASS_NAME, "android.widget.EditText")
el3.clear()

五、swipe()方法模拟滑动操作

  • 滑动操作是模拟用户在应用程序界面上进行手势滑动的操作。在Appium中,可以使用swipe()方法来执行滑动操作。它需要指定起始点和终止点的坐标,并且可以设置滑动的持续时间。滑动操作通常用于测试应用程序界面的可滚动性、页面切换和内容展示等功能。
# 获取屏幕尺寸
screen_size = driver.get_window_size()# 从下向上滑动
def swipeUp():# 定义起始点和终止点的坐标start_x = screen_size['width'] * 0.5start_y = screen_size['height'] * 0.9end_x = screen_size['width'] * 0.5end_y = screen_size['height'] * 0.1# swipe()方法执行滑动操作,duration参数来指定滑动的持续时间,单位为毫秒(ms)driver.swipe(start_x, start_y, end_x, end_y, duration=2000)
swipeUp()# 从上向下滑动
def swipDown():start_x = screen_size['width'] * 0.5start_y = screen_size['height'] * 0.1end_x = screen_size['width'] * 0.5end_y = screen_size['height'] * 0.9driver.swipe(start_x, start_y, end_x, end_y, duration=2000)
swipDown()# 从右向左滑动
def swipe_left_to():start_x = screen_size['width'] * 0.9start_y = screen_size['height'] * 0.5end_x = screen_size['width'] * 0.1end_y = screen_size['height'] * 0.5driver.swipe(start_x, start_y, end_x, end_y, duration=2000)
swipe_left_to()# 从左向右滑动
def swipe_right_to():start_x = screen_size['width'] * 0.1start_y = screen_size['height'] * 0.5end_x = screen_size['width'] * 0.9end_y = screen_size['height'] * 0.5driver.swipe(start_x, start_y, end_x, end_y, duration=2000)
swipe_right_to()

文章持续更新中…

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

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

相关文章

人机协同

人机协同是指人和机器之间进行合作和协同工作的方式,人机协同是人工智能技术发展的一个重要方向,通过人机协同的方式,可以充分利用机器的智能和人的智慧,共同实现更高效、更智能的工作和生活方式。人机协同可以应用于各种领域和场…

第0篇红队笔记-APT-HTB

nmap 80 port-web尝试 searchploit-无结果 资源隐写查看-无结果 135 port rpcclient rpcinfo.py rpcdump.py rpcmap.py rpcmap.py爆破UUID 查看该UUID的表代表的服务能搜到UUID的漏洞 IOXIDResolver提取IPv6地址 IPV6-nmap smb smb探测目录 文件下载 测试其他目录 zip文件…

Grammarly premium语法检测工具使用方法,及删除检测记录

科研写作神器:Grammarly—语法,标点,单词拼写错误修改。 一、背景 在写英文论文时,作为母语不是英语的我们,不可避免的存在语法错误或笔误,这时就需要Grammarly语法修改软件帮助我们进行修正&#xff0c…

【参数估计】---点估计之矩估计

点估计之矩估计 👻什么是参数估计👻引例---理解参数估计🐟点估计🍭引例🍭点估计问题 🐟矩估计🍭预备知识🍭矩估计的求解步骤🍭矩估计例题 👻什么是参数估计 在…

软件磁盘阵列(software RAID)

RAID-0 等量模式(各个磁盘平均存放文件) RAID-1 镜像模式(一个文件存放两个磁盘) RAID 01 RAID 10 组合模式 RAID 5 三块以上磁盘,记录文件和同位码(存放不通磁盘,通过同…

9.整数转换为布尔值【2023.12.1】

1.问题描述 整数转换为布尔值。 2.解决思路 输入一个整数。 输出布尔值并输出。 3.代码实现 numint(input("请输入一个数字")) boolnumbool(num) print(boolnum)4.运行结果

完美的输出打印 SQL 及执行时长[MyBatis-Plus系列]

导读 Hi,大家好,我是悟纤。过着爱谁谁的生活,活出不设限的人生。 在我们日常开发工作当中,避免不了查看当前程序所执行的SQL语句,以及了解它的执行时间,方便分析是否出现了慢SQL问题。 MyBatis-Plus提供了两种SQL分析打印的方式,用于输出每条SQL语句及其执行时间,针…

C/C++ 通过HTTP实现文件上传下载

WinInet(Windows Internet)是 Microsoft Windows 操作系统中的一个 API 集,用于提供对 Internet 相关功能的支持。它包括了一系列的函数,使得 Windows 应用程序能够进行网络通信、处理 HTTP 请求、FTP 操作等。WinInet 提供了一套…

R语言期末考试复习二

上篇文章的后续!!!! http://t.csdnimg.cn/sqvYD 1.给向量vec1设置名为"A","B","C","D","E","F","G"。 2.将矩阵mat1的行名设置为"Row1"&#…

powershell获取微软o365 21v日志

0x00 背景 o365 21v为o365的大陆版本,主要给国内用户使用。微软提供了powershell工具和接口获取云上日志。微软o365国内的代理目前是世纪互联。本文介绍如何用powershell和配置证书拉取云上日志。 0x01 实践 第一步,ip权限开通: 由世纪互联…

SQL Server 2016(为数据表Porducts添加数据)

1、实验环境。 某公司有一台已经安装了SQL Server 2016的服务器,并已经创建了数据库PM。 2、需求描述。 在数据库PM中创建表products,"编号"列的值自动增长并为主键。然后使用T-SQL语句为表格插入如下数据。 3、实验步骤。 1、使用SSMS管理工…

网络安全应急响应-Server2228(环境+解析)

网络安全应急响应 任务环境说明: 服务器场景:Server2228(开放链接)用户名:root,密码:p@ssw0rd123

【爬虫逆向分析实战】某笔登录算法分析——本地替换分析法

前言 作者最近在做一个收集粉币的项目,可以用来干嘛这里就不展开了😁,需要进行登录换算token从而达到监控收集的作用,手机抓包发现他是通过APP进行计算之后再请求接口的,通过官网分析可能要比APP逆向方便多&#xff0…

如何解决SSL证书部署后未生效或网站显示不安全

本文介绍SSL证书部署后未生效或网站显示不安全的排查方法。 浏览器提示“您与此网站建立的连接不安全” 浏览器提示“无法访问此页面” 浏览器提示“这可能是因为站点使用过期或者不全的TLS安全设置” 浏览器提示“此页面上部分内容不安全(例如图像)”…

Python datetime 字符串 相互转 datetime

字符串转 datetime from datetime import datetime# 定义要转换的日期时间字符串 dt_str "2021-09-30 15:48:36"# 使用datetime.strptime()函数进行转换 dt_obj datetime.strptime(dt_str, "%Y-%m-%d %H:%M:%S") print(dt_obj)datetime 转字符串 from …

c语言练习13周(1~5)

输入任意整数n求以下公式和的平方根。 读取一系列的整数 X,对于每个 X,输出一个 1,2,…,X 的序列。 编写double fun(int a[M][M])函数,返回二维数组周边元素的平均值,M为定义好的符号常量。 编写double fun(int a[M])函…

Spinnaker 基于 jenkins 触发部署

jenkins job 触发部署 将 Jenkins 设置为 Spinnaker 中的持续集成 (CI) 系统可让您使用 Jenkins 触发管道、向管道添加 Jenkins 阶段或向管道添加脚本阶段。 前置要求: 已在kubernetes中部署spinnaker已准备可用的jenkins实例 启用 jenkins触发器 官方文档&…

电源控制系统架构(PCSA)之系统控制处理器组件

目录 6.4 系统控制处理器 6.4.1 SCP组件 SCP处理器Core SCP处理器Core选择 SCP处理器核内存 系统计数器和通用计时器 看门狗 电压调节器控制 时钟控制 系统控制 信息接口 电源策略单元 传感器控制 外设访问 系统访问 6.4 系统控制处理器 系统控制处理器(SCP)是…

二 使用GPIO的复用功能 利用USART 实现printf()

参考这篇: STM32串口通信详解 1. 关于USART USART ( universal synchronous / asynchronous receiver /transmitter) 是一种串行通讯协议 , 允许设备通过串行端口进行数据传输, USART 能够以同步或者异步的方式进行工作,在实际的运用中&…

chrome vue devTools安装

安装好后如下图所示: 一:下载vue devTools 下载链接https://download.csdn.net/download/weixin_44659458/13192207?spm1001.2101.3001.6661.1&utm_mediumdistribute.pc_relevant_t0.none-task-download-2%7Edefault%7ECTRLIST%7EPaid-1-13192207…