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

一、环境搭建及准备工作

1、Appium 2 环境搭建

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

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

pip install Appium-Python-Client

Version: 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 AppiumBy


def 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:4723
    appium_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()

文章持续更新中…

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

中通快递查询,中通快递单号查询,分析筛选出多次揽收件

批量查询中通快递单号的物流信息,并将其中的多次揽收件分析筛选出来。 所需工具: 一个【快递批量查询高手】软件 中通快递单号若干 操作步骤: 步骤1:运行【快递批量查询高手】软件,第一次使用的朋友记得先注册&…

什么是软阈值,硬阈值,软聚类,硬聚类!!软和硬指的是什么呢?详细解释看这里!!!

文章目录 一、软阈值和硬阈值的基本概念和区别二、软聚类和硬聚类的详细概念和区别 一、软阈值和硬阈值的基本概念和区别 在我所研究的领域中,经常出现小波降噪,就拿小波降噪举例子吧!! 在信号处理中,小波降噪是一种…

ECONGU4280 Corporate Finance

ECONGU4280 Corporate Finance WeChat: zh6-86

SpringBoot+SSM项目实战 苍穹外卖(1)

目录 产品原型与技术选型后端环境搭建Git版本控制IDEA中运行sql脚本文件nginx反向代理和负载均衡完善登录功能 MD5加密 Builder 导入接口文档SwaggerSwagger常用注解 产品原型与技术选型 管理端原型图: 用户端原型图: 餐饮企业内部员工使用。 主要功能有…

ClassCMS2.4漏洞复现

ClassCMS2.4漏洞复现 环境搭建 任意文件下载漏洞复现 漏洞成因 ClassCMS2.4漏洞复现 CMS源码在附件中 环境搭建 使用phpstudy2016搭建web环境,php版本为5.5 安装CMS 这里选择Mysql数据库进行安装 用户名和密码都写默认的admin方便记忆 输入完成后点击安装 点…

如何制作一个数字人?流程是怎样的?

​​虚拟人概念从早期动漫领域的初音未来用一首《甩葱歌》让绿色双马尾的“歌姬”形象火出圈,到洛天依登上央视春晚舞台,再到众多虚拟歌手、虚拟主播、KOL、代言人等活跃于各种情境中。 去年以来,元宇宙和虚拟人技术进入全球科技产业的聚光灯…

IDEA解决Git冲突详解

目录 前言: 何为冲突 冲突演示 IDEA冲突解决 小结: 前言: 相信大家多多少少都有了解和使用过Git,作为Java程序员idea可谓是无敌的存在了,那么如何使用idea解决Git冲突呢?不瞒大家前段时间在公司把同事…

怎样搭建好Google关键词广告账号结构

搭建好Google关键词广告账号结构对于实现广告效果的最大化至关重要。本文小编将为您提供一些关于如何搭建好Google关键词广告账号结构的建议和步骤。 1、设定目标和策略 在开始搭建广告账号结构之前,首先需要明确您的广告目标和策略。您想要增加网站流量还是提高转…

基于GAN的多尺度门合并多模态MRI图像合成

Multi-Modal MRI Image Synthesis via GAN With Multi-Scale Gate Mergence 基于GAN的多尺度门合并多模态MRI图像合成背景贡献实验方法生成器gate mergence (GM) strategy(门控融合策略)判别器 损失函数Thinking 基于GAN的多尺度门合并多模态MRI图像合成…

什么牌子的led台灯质量好?考研必备五款护眼台灯推荐

眼睛更是心灵的窗户,我们通过这扇窗来欣赏这个美好的世界。而如今,近视在儿童中已司空见惯,近视率逐年提高,并且低龄化的现状更加突出。据世界卫生组织的最新研究报告,目前中国近视患者人数多达6亿,其中我国…

揭秘Steam充值卡的那些坑

揭秘Steam充值卡的那些坑 steam充值卡有两种形式,一种是实体礼品卡图,即老外线下购买实体卡然后刮开卡密拍照传给买家。另一种是电子版礼品卡,即一串卡密,没有实体卡。 而实体礼品卡的可靠性肯定远高于电子版礼品卡。 相信很多人…

UIkit-UIAlertContent

简单Demo //注意!!!必须放在viewController的viewDidAppear里面,viewDidLoad里面不行 - (void)viewDidAppear:(BOOL)animated {// 创建 UIAlertControllerUIAlertController *alertController [UIAlertController alertControll…

2023第二届全国大学生数据分析实践赛思路及代码

比赛时间 2023.12.16 09:00 至 2023.12.23 16:00 一、建模思路及代码 比赛开始后第一时间更新,建议先收藏哦 思路及代码更新地址 二、大赛时间 大赛报名截止时间:即日起—2023年12月15日 题目公布时间:2023年12月16日早上9点 论文提交…

SpringBoot参数校验@Validated和@Valid的使用

1、Validated和Valid区别 Validated:可以用在类、方法和方法参数上。但是不能用在成员属性(字段)上Valid:可以用在方法、构造函数、方法参数和成员属性(字段)上 2、引入依赖 Spring Boot 2.3 1 之前&…

关于SseEmitter(SSE)在本地可以响应,部署到服务器后无法响应的问题

关于SseEmitter(SSE)在本地可以响应,部署到服务器后无法响应的问题 GetMapping(value "/v3/detail", produces MediaType.TEXT_EVENT_STREAM_VALUE) ResponseBody public SseEmitter v3Detail(String id) {SseEmitter emitter new SseEmitter((long) …

Parasoft:正确的静态应用程序安全测试 (SAST) 解决方案

随着软件开发从Web应用扩展到工业物联网(IIoT)设备,静态应用安全测试(SAST)越来越有必要从根本上帮助确保软件的功能安全。根据 Forrester Research的研究,网络攻击是近两年安全漏洞的主要来源。因此&#…

玄学调参实践篇 | 深度学习模型 + 预训练模型 + 大模型LLM

😍 这篇主要简单记录一些调参实践,无聊时会不定期更新~ 文章目录 0、学习率与batch_size判断1、Epoch数判断2、判断模型架构是否有问题3、大模型 - 计算量、模型、和数据大小的关系4、大模型调参相关论文经验总结5、训练时模型的保存 0、学习率与batch_s…

多要素气象环境监测站知识科普

随着工业化和城市化的快速发展,气象环境的影响越来越受到人们的关注。为了更好地保护我们的环境,一款WX-CQ12 多要素气象环境监测站应运而生。这款监测站可以全方位地监测气象环境中的温度、湿度、气压、风速、风向、雨量、太阳辐射等重要要素&#xff0…

二维码看视频怎么做?轻松3 步将视频做成二维码

现在用二维码来扫码看视频是一种很流行的方式,这种方式只需要消耗流量就可以在线查看视频内容,无需等待接收或者下载视频就可以获取内容,有效的节省时间和空间。那么能够转换多种格式视频生成二维码的步骤是什么样的呢?其实想要快…

数据库范式1NF-4NF

码和属性 字段是对内而言的,private的 属性是对外而言的,public的 用Java中的类比喻就是一个对像里面定义了很多字段,一般情况下每个字段都有一组对应的getter&setter方法,注意到了吗,字段一般用private修饰&#…