Appium常用定位方法讲解
Appium常用定位方法讲解
对象定位是自动化测试中很关键的一步,也可以说是 最关键的一步,毕竟你对象都没定位那么你想操作也不行,下面我们来看常用的一些定位方式。
ID定位(取resource-id的值)
无论是在web自动化还是app自动化中id都是唯一的,可能有的小伙伴看到这里会有疑问,因为有的资料说是通过name定位是唯一的,为什么你这里是id呢,其实这个在之前是不冲突的,但是如果你用的是appium较新版本是不行的,在新版本中name定位被去掉了,所以在以后的定位中不会有name定位了,通常情况下我们也更喜欢用id进行定位。这里可能刚学的小伙伴会有疑问。
有的时候你的应用为什么没有id,或者说在这个手机上有但是另外的手机上没有
1.开发没有添加。2.android版本是4.4以下的
如果我们需要对'7'这个数字进行点击操作
driver.find_element_by_id("com.android.calculator2:id/digit7").click()
通过name定位元素(一般text属性认为是name)

driver.find_element_by_name("5").click()
className定位
在实际工作中classname定位用的相对而言会比较少。当你经常去看class时你会发现很多的classname是一样的,你没有办法对其进行唯一定位,下面我们看下面两张图片


我们可以仔细看一下这两张图片中手机号,密码两个输入框中的classname都是一样的,如果在这种情况下你使用
driver.find_element_by_class_name("android.widget.EditText").send_keys("111111")
这种方式去定位,你会发现你永远定位不了密码栏,这是为什么呢?因为在设计的时候如果你查找的元素在页面有多个,系统会自动给你选择第一个,所以你永远操作不了后面
text定位(需要使用uiautomator)
driver.find_elements_by_android_uiautomator("new UiSelector().text('7')")
使用这里需要注意以下,如果通过text定位的结果是个list,不能直接click。所以如果要点击需要取数组的值,比如下面是点击找到的第一个元素
driver.find_elements_by_android_uiautomator("new UiSelector().text('7')")[0].click()
xpath定位
xpath定位在web自动化中是最常见的,而且也是最有效的,使用xpath定位避免了找不到元素导致报错的问题,但是在app中使用xpath定位是一件很low的事情。只要遇见使用xpath定位元素它的反应就会比较慢,自动化的目的是为了提高效率,但是使用xpath后会降低效率,所以这里很low.


在上面两张图片中我们能够清除的看见他们的id,classname都是一样的,这样的情况下不用层级定位方式我们只能够采用xpath来进行定位,首先根据前面web的学习大家可以思考一下该怎么定位。
driver.find_element_by_xpath("//android.widget.TextView[@text='JavaScript']").click()
在xpath里面我们的语法是这样“//android.widget.TextView[@text='JavaScript']”,这个和我们之前web的xpath一样,意思是查找所有节点中节点为android.widget.TextView (这里使用的是className,也可以使用id,系统会依次去找)并且他的text属性值为JavaScript,这样是否更容易理解呢?下来多练习。这样的定位方式不推荐,效率很慢。

css_selector定位(webview)--加载网页--css
只适用于webview的html页面,继承自webdriver,与pc版本的UI测试一致
driver.find_element_by_css_selector()
link_text定位(webview)
只适用于webview容器中的html页面,继承自webdriver,与pc版本的UI测试一致
driver.find_element_by_link_text()
源代码
coding:utf-8
from appium import webdriver
#desired_caps是一个字典
desired_caps = {}
#你要测试的手机操作系统
desired_caps['platformName'] = 'Android'
#手机操作系统的版本
desired_caps['platformVersion'] = '7.0'
#使用的手机类型或模拟器类型
desired_caps['deviceName'] = 'XPUDU17113015063'
#deviceName你的模拟器名字,就是在下载AVD的时候,你填写的,忘了的回头去找,或者在模拟器顶部会显示
#所运行的app包名
desired_caps['appPackage'] = 'com.example.login'
#app运行的事件
desired_caps['appActivity'] = '.MainActivity'
#启动打开app
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
#根据元素定位,执行点击操作
# user= driver.find_element_by_name("请输入用户名")
# user = driver.find_element_by_id("com.example.login:id/et_username")
driver.find_element_by_class_name("android.widget.EditText").send_keys("jilidaxue")
# driver.find_element_by_id("com.example.login:id/et_password").send_keys("66889558")
# user.send_keys("liangyibo")
driver.find_element_by_xpath("//android.widget.EditText[@text='请输入密码']").send_keys("233254545")
# pwd = driver.find_element_by_name("请输入密码")
# pwd.send_keys("123456")
# # driver.find_element_by_xpath("//android.widget.FrameLayout[1]//android.widget.LinearLayout[3]").click()
driver.find_element_by_xpath("//android.widget.Button[@text='登录']").click()
driver.quit()
Appium常用定位方法讲解的更多相关文章
- Appium的常用定位方法
使用uiautomatorviewer.bat工具来找到属性定位元素,在SDK的tools目录下找到该工具,双击打开.左边框内展示app的界面元素,右上角框内展示元素的层级关系,右下角框内展示元素的属 ...
- Python Appium 元素定位方法简单介绍
Python Appium 元素定位 常用的八种定位方法(与selenium通用) # id定位 driver.find_element_by_id() # name定位 driver.find_ ...
- python + appium 常用公共方法封装
appium 程序下载安装见之前的帖子:https://www.cnblogs.com/gancuimian/p/16536322.html appium 环境搭建见之前的帖子:https://www ...
- appium 元素定位方法汇总
以上图为例,要定位到右下角的 我的 ,并点击 # appium的webdriver提供了11种元素定位方法,在selenium的基础上扩展了三个,可以在pycharm里面输入driver.find_e ...
- Selenium3+python自动化007-Selenium常用定位方法
自动化测试只要掌握四步操作:获取元素,操作元素,获取返回结果,断言(返回结果与期望结果是否一致),最后自动出测试报告.元素定位在这四个环节中是至关重要的,如果说按学习精力分配的话,元素定位占70%:操 ...
- python+selenium实现163邮箱登陆—iframe动态ID定位 及常用定位方法
今天发现之前的登录163邮箱脚本定位不到iframe了,原因是iframe拼接了动态ID,修改后的脚本如下: from selenium import webdriver driver = webdr ...
- 自动化测试工具selenium的常用定位方法
定位方法不仅限于这些,我也会随时补充,大家有其他补充或建议可以在评论区一起讨论哦!!! [打开链接]drive.get("https://www.baidu.com") ...
- StringUtils类常用的方法讲解
StringUtils 方法的操作对象是 Java.lang.String 类型的对象,是 JDK 提供的 String 类型操作方法的补充,并且是 null 安全的(即如果输入参数 String 为 ...
- Robotframework + Appium 之常用元素定位方法
任何自动化测试,其实手动测试也是一样的,元素定位(目标定位)是首要任务,这是最直接的测试对象呀! 好了,废话不多说,又到了元素定位啦,之前我们已经介绍过selenium及appium常用的定位方法,下 ...
- python + selenium 常用公共方法封装
selenium 环境配置及浏览器驱动的安装:https://www.cnblogs.com/gancuimian/p/16435300.html uiautomator2 常用公共方法封装见之前的帖 ...
随机推荐
- NEFU OJ Problem1485 贪吃蛇大作战 题解
Problem:F Time Limit:1000ms Memory Limit:65535K 题目 Description 贪吃蛇大家一定都玩过吧,现在宋哥也要玩这个游戏,最初的时候贪吃蛇从屏幕的左 ...
- H.264中的帧
导言 高级视频编码 (AVC) 也称为 H.264,是使用最广泛的视频压缩标准.它与所有主要的流式传输协议和容器格式兼容. 当我们使用播放器播放一个视频时,通常会经过:解协议,解封装,音视频解码,音视 ...
- 神经网络入门篇之深层神经网络:详解前向传播和反向传播(Forward and backward propagation)
深层神经网络(Deep L-layer neural network) 复习下前面的内容: 1.逻辑回归,结构如下图左边.一个隐藏层的神经网络,结构下图右边: 注意,神经网络的层数是这么定义的:从左到 ...
- Android学习day01【搭建Android Studio】
是Google开发的操作系统 Android开发是移动应用开发的表现形式之一 还有很多的开发形式,就不一一列举了 完整项目精简的开发流程 开发工具 Android studio(强烈建议) Andro ...
- [FJOI2017]矩阵填数 (容斥原理)
题目传送门 现在看来熊猫杯的J题原来是个容斥套路题,按照值域排序后根据值域划分方块数,枚举子集容斥计算即可. #include<cstdio> #include<algorithm& ...
- BI工具:让数据分析井然有序一望而知
BI(Business Intelligence)工具是一类专门用于数据分析和决策支持的软件工具. 它们能够将企业内部和外部的数据进行整合.处理和可视化,帮助用户从海量数据中获取有价值的见解和洞察,并 ...
- MYSQL EXPLAIN 执行计划
EXPLAIN 执行计划 有了慢查询语句后,就要对语句进行分析.一条查询语句在经过 MySQL 查询优化器的各种基于成本和规则的优化会后生成一个所谓的执行计划,这个执行计划展示了接下来具体执行查询的方 ...
- Tensorflow2.0实现VGG13
导入必要的库: import os import tensorflow as tf from tensorflow import keras from tensorflow.keras import ...
- Kernel Memory 入门系列:文档预处理
Kernel Memory 入门系列:文档预处理 Embedding为我们提供了问题理解和文档检索的方法,但是面对大量的文档,如果在用于提问的时候再进行文档的Embedding的话,那这个过程是非常耗 ...
- 文心一言 VS 讯飞星火 VS chatgpt (164)-- 算法导论13.1 4题
四.用go语言,假设将一棵红黑树的每一个红结点"吸收"到它的黑色父结点中,使得红结点的子结点变成黑色父结点的子结点(忽略关键字的变化).当一个黑结点的所有红色子结点都被吸收后,它可 ...