【2023最全教程】python+appium自动化测试元素定位(建议收藏)

关于app自动化测试,元素定位工具有三个:

appium自带的Appium Inspector工具

Android ADT原生的工具

python版uiautomator2中的weditor

由于我常用的是前两个,所以下面只介绍前面两种元素定位工具(以下内容中均以微博为例子)

一、元素定位工具

(一).Appium Inspector

使用该工具的使用前提:

1.客户端通过adb devices的dos命令确认是否连接设备

2.当前连接的设备是否被其它应用程序占用

3.已安装appium desktop(appium的desktop下载地址:appium.io/)

使用步骤如下:

1.启动appium服务器,点击右上角的第一个按钮(放大镜按钮),如下图:

2.进入后页面显示如下图所示,一般情况下都选择本地服务

3.参数设置完成后点击右下角的Start Session,进入如下图所示页面

在该页面就可以进行元素定位了

(二).uiautomatorviewer—仅限Android设备使用

使用该工具的使用前提:

1.客户端通过adb devices的adb命令确认是否连接Android设备

2.当前连接的设备是否被其它应用程序占用

3.具有运行Android SDK功能的Windows

4.安装jdk1.8(由于目前不支持jdk1.8以上的版本,需要使用该工具要安装jdk1.8的版本)

5.使用Android5.0以上系统

6.确保为设备打开了开发人员模式,并打开USB调试

安装:

1.在android studio的启动页面当中,选择右下角的configure -> SDK Manager会弹出如图:选择android SDK -> SDK Tools,按图中勾选,点击ok进入安装,安装完成即可关闭android studio。记住图中Android SDK Location对应

2.在Android studio中找到SDK,找到uiautomator,存放的位置为:D:\Android-SDK\tools\bin\uiautomatorviewer.bat

使用步骤如下:

1.找到uiautomatorviewer.bat文件,双击打开

2.开启后页面显示如下图:

3.若在定位时出现下图问题,可以尝试以下几种解决方法:

  • 查看手机是否开启开发者权限,打开USB调试

  • 在adb命令提示符中输入adb devices查看手机是否连接到PC端,再使用adb shell是否能进入到手机(exit退出)

  • 应用程序是否被占用

  • 关闭uiautomatorviewer,重新打开是否能定位到

(三).两种定位工具的区别

appium inspector需要启动appium服务器,填写Appium Desired Capabilities,略显麻烦,而uiautomatorviewer只需要连接手机

appium inspector实时获取当前页面布局,而uiautomatorviewer方便存储,不需要实时获取

appium inspector在操作App到下一页面时,刷新后经常会看到在转圈圈,很久都没有更新

appium inspector中控件属性有xpath的绝对定位,而uiautomatorviewer没有xpath的绝对定位

uiautomatorviewer获取页面布局时经常会获取不到

每种工具都有缺陷,选择最适合自己的就好啦

三、元素定位的方法

下面介绍几种元素定位方式,常见的元素定位方式是前三种

(一).ID定位

id对应控件属性列表中的:resource-id

  1. driver.find_element_by_id("com.sina.weibo:id/tv_title_lookaround")

(二).XPATH定位

xpath对应控件属性列表中的:xpath(绝对定位只有appium inspector中才有)

# 绝对定位
driver.find_element_by_xpath("/hierarchy/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.LinearLayout[2]/android.widget.LinearLayout/android.widget.TextView")
# 相对定位
driver.find_element_by_xpath("//android.widget.Button[@text='登录']")

(三).CLASSNAME定位

classname对应控件属性列表中的:class

注意:由于一个页面中可能会存在多个按钮的classname一致,但使用classname定位时,默认选择页面中的第一个classname,可以将所有classname相同的元素放置在一个list列表中,点击你所需要的位置的元素即可(列表中的元素从0开始)

  1. driver.find_element_by_class_name("android.widget.TextView")

(四).accessibility定位

accessibility对应控件属性列表中的:content-desc

  1. driver.find_element_by_accessibility_id("请输入手机号或邮箱")

(五).text定位

text对应控件属性列表中的:text

  1. driver.find_element_by_name("登录")

(六).其它定位

元素定位除了使用find_element_by_xxx,还可以使用page_source,page_source能够查找到这个页面的所有元素,再通过if/else来查找目标元素是否存在于页面中

page_source = self.driver.page_source
            if"image_cancel"in page_source:
                self.driver.find_element(*locator).click()
            elif"tips"in page_source:
                pass

关于PO模式的元素定位方式,会在后面PO模式时再进行介绍

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你! 

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

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

相关文章

centos的root密码忘记或失效的解决办法

目录 前言1 单机维护模式2 利用具有管理员权限的用户切换到root用户3 救援模式 前言 在Linux系统中,root用户是最高权限的用户,可以执行任何命令和操作。但是,如果我们忘记了root用户的密码,或者需要修改root用户的密码&#xff…

Vue-Pinia

目录 Pinia状态管理库 使用步骤 1、安装Pinia 2、在vue应用实例中使用pinia 3、在src/stores/token.js中定义stores 4、在组件中使用store axios请求拦截器 代码实现 Pinia状态管理库 Pinia是Vue的专属状态管理库,它允许你跨组件或页面共享状态 一般在登录时…

Java 各种工具类的使用方法

1. 属性拷贝 属性名词和类型相同才能拷贝 import org.springframework.beans.BeanUtils; BeanUtils.copyProperties(dto,wmNews); //dto, wmNews 是两个实体类 dto为源对象,wmNews为目标对象2. list集合转换为string类型 import org.apache.commons.lang3.String…

将Python程序(.py)转换为Windows可执行文件(.exe)

python开发者向普通windows用户分享程序,要给程序加图形化的界面(传送门:这可能是最好玩的python GUI入门实例! http://www.jianshu.com/p/8abcf73adba3),并要将软件打包为可执行文件(.exe结尾),那如何将.py转为.exe ? 将.py转为.exe 第一步:安装pyinstaller(临时调用了国内豆…

atoi函数的模拟实现

函数原型&#xff1a;int atoi (const char * str); 作用&#xff1a;将字符串转换为整数 注意事项&#xff1a; 1、会忽略字符串前的空白字符&#xff0c;并从第一个非空白字符开始解析整数&#xff0c;直到遇到非数字字符为止 具体代码如下&#xff1a; #include <s…

sscanf提取相应字符到数组

代码如下 #include<stdio.h> #include<string.h>int main(int argc, char const *argv[]) {char buf[128] {0};int m1 0, m2 0;int s1 0, s2 0;char lrc[128] "";sscanf("[02:16.33][04:11.44]我想大声宣布对你恋恋不舍","[%*1d%d…

gitLab server version 13.12.1 is not supported

拉代码的时候&#xff0c;报的这个错&#xff0c;实际上就是因为gitLab 版本太低了&#xff0c;这里不准备升级版本&#xff0c;打算继续使用账号密码来拉取代码 在idea已经安装的插件中&#xff0c;去掉gitlab插件&#xff0c;如下&#xff1a; 之后再拉取代码&#xff0c;就…

五分钟学会搭建悟空CRM内网穿透,实现公网访问企业内网,提升工作效率!

文章目录 前言1. 无需公网IP&#xff0c;使用cpolar实现悟空CRM远程访问2. 通过公网来访问公司内网悟空CRM3. 设置固定连接公网地址 前言 悟空CRM是一款开源的客户关系管理系统&#xff0c;以"客户关系一对一理论"为基础&#xff0c;通过对企业业务流程的重组来整合…

【MATLAB】史上最全的7种回归预测算法全家桶

有意向获取代码&#xff0c;请转文末观看代码获取方式~ 大家吃一顿火锅的价格便可以拥有9种时序预测算法&#xff0c;绝对不亏&#xff0c;知识付费是现今时代的趋势&#xff0c;而且都是我精心制作的教程&#xff0c;有问题可随时反馈~也可单独获取某一算法的代码&#xff08…

《C++避坑神器·十九》C++多线程使用,啥也不懂看它就对了

C11后有了标准的线程库&#xff1a; #include <thread>并发 是指多个线程任务在同一个CPU上快速地轮换执行&#xff0c;由于切换的速度非常快&#xff0c;给人的感觉就是这些线程任务是在同时进行的&#xff0c;但其实并发只是一种逻辑上的同时进行&#xff1b; 并行 是…

GPTS全网刷屏!定制增长速度指数增长

还记的上周OpenAI刚刚举行完开发者大会&#xff0c;在大会上主要公布了三个事情&#xff1a; 新版本的GPT-4 Turbo&#xff1a;更强大、更便宜且支持128K新的助手API&#xff1a;让开发者更轻松地基于GPT构建辅助AI应用平台中新的多模态功能&#xff1a;包括视觉、图像创作&am…

MIB 6.1810操作系统实验:准备工作(Tools Used in 6.1810)

6.1810 / Fall 2023 实验环境&#xff1a; Ubuntuxv6实验必要的依赖环境能通过make qemu进入系统 $ sudo apt-get update && sudo apt-get upgrade $ sudo apt-get install git build-essential gdb-multiarch qemu-system-misc gcc-riscv64-linux-gnu binutils-ri…

Day1跟李沐学AI-深度学习课程00-04【预告、课程安排、深度学习介绍、安装、数据操作+数据预处理】

00 预告 《动手学深度学习》https://github.com/d2l-ai/d2l-zh 01 课程安排 02 深度学习介绍 03 安装 本地安装 使用conda/miniconda环境 conda env remove d2l-zh conda create -n -y d2l-zh python3.8 pip conda activate d2l-zh 安装需要的包 pip install -y jupyter …

云ES容灾方案

一、ES集群可用性容灾 1.1 云ES集群可用性容灾(使用跨可用区实例) 云ES集群部署在三个可用区,单可用区故障,云ES集群依然可能对外提供服务;两个可用区故障,需要进行控制台切流(集群会自动切的选择主节点) 应用服务部署在二个可用区,单可用区故障,依然可对提供服务1.2 …

C/C++---------------LeetCode第1189. “气球” 的最大数量

气球的最大数量 题目及要求统计法在main内使用 题目及要求 给你一个字符串 text&#xff0c;你需要使用 text 中的字母来拼凑尽可能多的单词 “balloon”&#xff08;气球&#xff09;。 字符串 text 中的每个字母最多只能被使用一次。请你返回最多可以拼凑出多少个单词 “ba…

数据结构-二叉树力扣题

目录 1.相同的树 2.二叉树中查找值为x的节点 3.单值二叉树 4.对称二叉树 5.二叉树的前序遍历 6.另一颗树的子树 层序遍历&#xff1a; 7.二叉树遍历 8.判断二叉树是否是完全二叉树 一个特殊的性质&#xff1a; 1.相同的树 题目链接&#xff1a;力扣&#xff08;LeetC…

与7无关的数

系列文章目录 进阶的卡莎C++_睡觉觉觉得的博客-CSDN博客数1的个数_睡觉觉觉得的博客-CSDN博客双精度浮点数的输入输出_睡觉觉觉得的博客-CSDN博客足球联赛积分_睡觉觉觉得的博客-CSDN博客大减价(一级)_睡觉觉觉得的博客-CSDN博客小写字母的判断_睡觉觉觉得的博客-CSDN博客纸币(…

LeetCode热题100——二分查找

二分查找 1. 搜索插入位置2. 搜素二维矩阵3. 在排序数组中查找第一个和最后一个元素位置 1. 搜索插入位置 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 // 题…

MySQL5.7安装详细过程--window系统

1、Window安装MySQL5.7详细过程 1.1、下载MySQL5.7安装包 下载地址&#xff1a;https://downloads.mysql.com/archives/community/ 1.2、将文件解压到盘符中 你可以解压到你想解压的位置&#xff0c;放在C或其他盘符都可以。 我放在了C盘中&#xff1a;C:\Program Files\my…