Python Appium 安卓自动化测试 基本使用 - Phone Spider

news2024/11/30 12:43:17

Python Appium 安卓自动化测试 基本使用

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
例如:第一章 Python 机器学习入门之pandas的使用


文章目录

  • Python Appium 安卓自动化测试 基本使用
  • 前言
  • 一、环境安装
    • 1.1 Python Pip 安装模块
    • 1.2 Sdk、Jdk、Appium-desktop 网盘下载
    • 1.3 参考文档
  • 二、Android Sdk uiautomateviewer 分析&定位App界面元素
    • 2.1 启动步骤
    • 2.2 常见的问题
      • 2.2.1 解决方法1:
      • 2.2.2 解决方法2:
    • 2.3 resource-id 属性分析 常用于元素定位
    • 2.4 bounds 属性分析 可用于元素定位
    • 2.5 text 属性分析 可用于文本判断
    • 2.6 content-desc 属性分析 描述组件作用的文本
    • 2.7 xpath 元素定位
    • 2.8 UiSelector 元素定位,多条件定位
  • 三、 Appium Desktop Appium 分析&定位App界面元素
    • 3.1 启动步骤
    • 3.2 获取界面元素
    • 3.3 在Appium Desktop Appium 根据xpath语法进行元素搜索&定位
  • 四、定位注意事项
    • 4.1 element & elements
  • 五、python 常规代码


前言

例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考

一、环境安装

1.1 Python Pip 安装模块

pip install Appium-Python-Client -i https://pypi.tuna.tsinghua.edu.cn/simple

1.2 Sdk、Jdk、Appium-desktop 网盘下载

链接:https://pan.baidu.com/s/19C9fGmoXne8DgfXhrTB2TQ

提取码:kgwb

1.3 参考文档

https://www.byhy.net/tut/auto/appium/01/

二、Android Sdk uiautomateviewer 分析&定位App界面元素

2.1 启动步骤

在SDK的目录下找到tools/bin/uiautomatorviewer.bat,双击即可运行;
在这里插入图片描述
在这里插入图片描述

2.2 常见的问题

Error while obtaining UI hierarchy XML file: com.android.ddmlib.SyncException: Remote object doesn't exist!

2.2.1 解决方法1:

一般都是和Appium Desktop Appium 冲突了,关闭Appium Desktop Appium 重新获取app界面即可;

2.2.2 解决方法2:

命令面板运行:adb reconnect
运行后再次点击连接即可

2.3 resource-id 属性分析 常用于元素定位

resource-id=tv.danmaku.bili:id/search_src_text, 可通过search_src_text进行元素ID定位,也可以写全(tv.danmaku.bili:id/search_src_text)定位;

from selenium.webdriver.common.by import By
driver.find_element_by_id('search_src_text')
driver.find_element(By.ID, 'search_src_text')

2.4 bounds 属性分析 可用于元素定位

bounds = [175,88][887,171],表示某个元素左上角的宽高和右下角的宽高边界像素点位置;

2.5 text 属性分析 可用于文本判断

text=appium,组件里边的内容;

2.6 content-desc 属性分析 描述组件作用的文本

可以根据文本进行元素定位

from appium.webdriver.common.appiumby import AppiumBy
driver.find_element_by_accessibility_id('搜索查询')
driver.find_element(AppiumBy.ACCESSIBILITY_ID, '搜索查询')

2.7 xpath 元素定位

具体的操作介绍,在下边三、Appium Desktop Appium 查看;

2.8 UiSelector 元素定位,多条件定位

参考 这里的谷歌安卓官方文档介绍: https://developer.android.google.cn/training/testing/ui-automator

UiSelector常用的元素选择方法

  • text(“搜索查询”),可以根据元素的文本属性查找元素定位
  • textContains(“python”),根据文本包含什么字符串定位
  • textmartch(),可以使用正则表达式定位
  • className(“android.widget.TextView”),根据组件名称定位
  • resourceId(“tv.danmaku.bili:id/search_src_text”),根据组件ID定位
  • index(1),根据在父元素中的位置下标进行定位,下标从1开始计算,类似xpath 里面的*[n];
  • instance(0),在定位的元素结果中根据下标进行取值,下标从0开始计算;
  • childSelector(new UiSelector().className(“android.widget.TextView”)),在定位的元素中继续定位子元素;
from appium.webdriver.common.appiumby import AppiumBy
code = 'new UiSelector().text("搜索查询").className("android.widget.TextView").resourceId("tv.danmaku.bili:id/search_src_text")'
result = driver.find_element(AppiumBy.ANDROID_UIAUTOMATOR, code)
childSelectorCode = 'new UiSelector().resourceId("tv.danmaku.bili:id/search_src_text").childSelector(new UiSelector().className("android.widget.TextView"))'
result = driver.find_elements_by_uiautomator(childSelectorCode);

注意上边的code变量,里面写的是Java代码,Java代码只能使用双引号,所以在编写的时候多多注意;

三、 Appium Desktop Appium 分析&定位App界面元素

3.1 启动步骤

1、打开Appium 点击Start Server,启动程序,点击右上角的放大镜
在这里插入图片描述
2、添加配置

# python代码需要使用到的配置
desired_caps = {
  'platformName': 'Android',  # 被测手机是安卓
  'platformVersion': '10',  # 手机安卓版本
  'deviceName': 'xxx', # 设备名,安卓手机可以随意填写
  'appPackage': 'tv.danmaku.bili',  # 启动APP Package名称
  'appActivity': '.MainActivityV2',  # 启动Activity名称
  'unicodeKeyboard': True,  # 使用自带输入法,输入中文时填True
  'resetKeyboard': True,  # 执行完程序恢复原来输入法
  'noReset': True,  # 不要重置App
  'newCommandTimeout': 6000,  # 最大请求超时的时间
  'automationName' : 'UiAutomator2'
  # 'app': r'd:\apk\bili.apk',
}
// Appium Desktop  Appium 捕获app界面元素配置
{
  "platformName": "Android",
  "platformVersion": "10",
  "deviceName": "xxx",
  "appPackage": "tv.danmaku.bili",
  "appActivity": ".MainActivityV2",
  "unicodeKeyboard": true,
  "resetKeyboard": true,
  "noReset": true,
  "newCommandTimeout": 6000,
  "automationName": "UiAutomator2"
}

在这里插入图片描述

3.2 获取界面元素

在这里插入图片描述

3.3 在Appium Desktop Appium 根据xpath语法进行元素搜索&定位

1、根据class进行定位需要写全://android.widget.TextView
2、根据根据resource-id定位某个组件://*[@resource-id=“tv.danmaku.bili:id/action_search”]
3、根据元素节点进行相对定位:定位热门元素;

定位语法://*[@resource-id=‘tv.danmaku.bili:id/tabs’]//android.view.ViewGroup[3]

from appium.webdriver.common.appiumby import AppiumBy
driver.find_element(AppiumBy.XPATH, "//*[@resource-id='tv.danmaku.bili:id/tabs']//android.view.ViewGroup[3]")
driver.find_element_by_xpath("//*[@resource-id='tv.danmaku.bili:id/tabs']//android.view.ViewGroup[3]")

四、定位注意事项

4.1 element & elements

下面的解释不只是针对xpath定位方法,也包含所有带element字眼的方法
find_element_by_xpath,不带s的表示定位匹配到的第一个,一般用来定位;
find_elements_by_xpath,带s的表示定位匹配到的所有,一般用来获取元素的数据值;

五、python 常规代码

from appium import webdriver
from selenium.webdriver.common.by import By
from appium.webdriver.extensions.android.nativekey import AndroidKey


"""
    获取app activity信息
    打开目标app至手机的当前活动屏幕中, 打开cmd 输入下面的命令 获取手机正在运行的app信息
        adb shell dumpsys activity recents | find "intent={"
    第一行就是手机当前app的信息、提取cmp的信息,.MainActivityV2
        cmp=tv.danmaku.bili/.MainActivityV2
    
"""

desired_caps = {
  'platformName': 'Android',  # 被测手机是安卓
  'platformVersion': '10',  # 手机安卓版本
  'deviceName': 'xxx',  # 设备名,安卓手机可以随意填写
  'appPackage': 'tv.danmaku.bili',  # 启动APP Package名称
  'appActivity': '.MainActivityV2',  # 启动Activity名称
  'unicodeKeyboard': True,  # 使用自带输入法,输入中文时填True
  'resetKeyboard': True,  # 执行完程序恢复原来输入法
  'noReset': True,  # 不要重置App
  'newCommandTimeout': 6000,
  'automationName': 'UiAutomator2'
  # 'app': r'd:\apk\bili.apk',
}

# 连接Appium Server,初始化自动化环境
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)

# 设置缺省等待时间
driver.implicitly_wait(5)

# 如果有`青少年保护`界面,点击`我知道了`
iknow = driver.find_elements(By.ID, "text3")
if iknow:
    iknow.click()

# 根据id定位搜索位置框,点击
driver.find_element(By.ID, 'expand_search').click()

# 根据id定位搜索输入框,点击
sbox = driver.find_element(By.ID, 'search_src_text')
sbox.send_keys('白月黑羽')
# 输入回车键,确定搜索
driver.press_keycode(AndroidKey.ENTER)

# 选择(定位)所有视频标题
eles = driver.find_elements(By.ID, 'title')

for ele in eles:
    # 打印标题
    print(ele.text)

input('**** Press to quit..')
driver.quit()

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

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

相关文章

【接口技术】输入输出接口习题

1:图1所示电路PC/XT系统板上的接口控制电路的端口地址译码电路。写出8237A,8259A,8253,8255A的端口地址范围 解答: 【G1A非】和【G2B非】为低电平有效,因此A80,A90 74ls138中,是按…

python代码混淆与代码打包

0x00 背景 自己写的项目,又想保护源码,自己做个混淆是最方便的了。 0x01 实践 这里使用开源工具 GitHub - astrand/pyobfuscate: pyobfuscate,虽然git上才500多star,但是很好用。它的使用场景是混淆单个py文件。很多事物有开始就…

六、vpp 流表

草稿!!! vpp node其实就是三个部分 1、plugin init 2、set command 3、function 实现功能,比如这里的流表 这里的function函数有个返回值,根据返回值决定下一个节点走哪里 flowtable_getinfo这里处理函数返回2 &#…

Nodejs沙箱逃逸

一、基本概念 JavaScript和Nodejs之间有什么区别 JavaScript用在浏览器前端,后来将Chrome中的v8引擎单独拿出来为JavaScript单独开发了一个运行环境,因此JavaScript也可以作为一门后端语言,写在后端(服务端)的JavaScr…

什么是博弈论?

什么是博弈?字面描述中,博弈由两个字构成:博 和 弈。博弈是一种双方(多方)的对抗(比赛),对抗总是在一定的规则下进行,参与者必然会考虑应用相应的策略(计谋&a…

防火墙基础之H3C防火墙分支与分支之间双向地址转换

分支与分支之间双向地址转换 原理概述: 防火墙(英语:Firewall)技术是通过有机结合各类用于安全管理​与筛选的软件和硬件​设备,帮助计算机网络于其内、外网之间构建一道相对隔绝的保护屏障,以保护用户资…

leetCode 376.摆动序列 动态规划 + 图解 + 状态转移

376. 摆动序列 - 力扣(LeetCode) 如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为 摆动序列 。第一个差(如果存在的话)可能是正数或负数。仅有一个元素或者含两个不等元素的序列也视作摆动序列。 例如…

SpringBoot整合RocketMQ笔记

SpringBoot版本为2.3.12.Release RocketMQ对比kafka 学习链接 https://zhuanlan.zhihu.com/p/335216381 代码实战 https://www.cnblogs.com/RedOrange/p/17401238.html Centos安装rocketmq https://blog.csdn.net/chuige2013/article/details/123783612 RocketMQ详细配置与…

竞赛 大数据疫情分析及可视化系统

文章目录 0 前言2 开发简介3 数据集4 实现技术4.1 系统架构4.2 开发环境4.3 疫情地图4.3.1 填充图(Choropleth maps)4.3.2 气泡图 4.4 全国疫情实时追踪4.6 其他页面 5 关键代码最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 大数据疫…

宝塔 php修改了php.ini配置不生效

最近在使用hypref,php的版本是7.4 服务器linux,用宝塔安装完php,并装完swoole插件后 安装了swoole后,需要在php.ini中修改一下配置文件 添加 swoole.use_shortnameOff 但是添加了,重启php,依然不生效 解决方法是: 同时…

数字时代古文的传承———云南文化瑰宝“爨文化“(我为家乡发声)

文章目录 前言⭐ "爨"意味着什么,究竟何为"爨文化"?⭐ 爨文化鲜明的特点1.经济生活2.政治生活3.文化艺术 ⭐ 数字时代古文的传承与传播1.藏品数字化2.建立数据库3.传播大众化 前言 爨文化是继古滇文化之后崛起于珠江正源南盘江流域…

[Linux] 6.VMware虚拟机网络配置

在VMware虚拟机下可以在虚拟网络编辑器看到三种模式 一、Bridged(桥接模式) 桥接模式就是将主机网卡与虚拟机虚拟的网卡利用虚拟网桥进行通信。 真机、虚拟机都有自己的ip地址,能互相通讯,而且能上网。 功能齐全,但…

【Django笔记】5 Django模板

1. Django-bootstrap3 Bootstrap 是要给CSS/HTML 框架 Django-bootstrap3 是Bootstrap3 集成到Django中,作为Django 的一个应用。 (3 表示版本号) Django-bootstrap3 安装 django-bootstrap3 PyPI Installation Install using pip: pip install django-boots…

雷达编程实战之功耗优化技术(低功耗)

本篇文章以xWRL6432为例,首先介绍了芯片内部的电源管理框架,在产品业务处理流程的不同阶段,我们可以对不同电源域进行相应的开/关来降低功耗。然后介绍了不同的硬件电源参考设计对芯片功耗的影响,又着重介绍了线性调频脉冲相关参数…

1.2.C++项目:仿muduo库实现并发服务器之时间轮的设计

文章目录 一、为什么要设计时间轮?(一)简单的秒级定时任务实现:(二)Linux提供给我们的定时器:1.原型2.例子 二、时间轮(一)思想(一)代码 一、为什…

2023年显著性检测论文及代码汇总(3)

ACM MM Point-aware Interaction and CNN-induced Refinement Network for RGB-D Salient Object Detection code Abstacrt:近年来,CNN在特征提取和跨模态交互中得到了充分的利用,但在自模态和跨模态的全局远程依赖关系建模方面仍存在不足。…

二叉树的常见操作

二叉树的常见操作 注:二叉树的结构如下: typedef char BinaryTreeDataType; typedef struct BinaryTreeNode {struct BinaryTreeNode* left;struct BinaryTreeNode* right;BinaryTreeDataType data; }BTNode;以下所有操作都以下面的树为例:…

PHP8中final关键字的应用-PHP8知识详解

在PHP8中,final的中文含义是最终的、最后的意思。被final修饰过的类和方法就是“最终的版本”。 如果关键字final放在类的前面,则表示该类不能被继承。 如果关键字final放在方法的前面,则表示该 方法不能被重新定义。 如果有一个类的格式为…

ili9431液晶 tft_espi图形库演示 时钟、天气、滚动、气象图标

米思齐tft_spi模块库演示程序。心知天气、阿里云时钟、WiFi信号强度检测、1分钟滚屏、更新天气时间为15分钟、加入天气图标。更新天气次数。断网检测 。此程序为tft_eSPI图形库演示、如感觉好可以自行优化。 ili9431tft_espi库是用于ESP32和ESP8266芯片的TFT LCD驱动程序库&am…

C++基础_Day02

文章目录 四、流程控制语句4.1 选择结构4.1.1 if语句 4.1.2 三目运算符4.1.3 switch语句注意事项 4.1.4 if和switch的区别【CHAT】4.2 循环结构4.2.1 while循环语句4.2.2 do...while循环语句 4.2.3 for循环语句九九乘法表 4.3 跳转语句4.3.1 break语句4.3.2 continue语句4.3.3 …