Python3+Appium学习笔记08-元素定位
appium整合了不同的自动化测试驱动程序。而新版本appium desktop 中安卓是使用UI Automator2来作为驱动程序的。以前版本是使用UI Automator1或 Selendroid。所以参数中需要加上 'automationName': 'uiautomator2'指定驱动程序。第一次使用这个参数的时候,会安装一个sever程序。
另外就是元素操作的时候,需要打开开发者选项中的USB模拟点击权限。
定位方式大部分是和selenium一样的。小部分是安卓和ios对应驱动中特有的。
同样也有find_element(单个元素)和find_elements(多个元素)两种模式,后者定位返回的是一个数组。
1)id定位
driver.find_element_by_id()
使用UI Automator Viewer上对应resource-id的值

from appium import webdriver
import time desired_caps = {
'platformName': 'Android',
'platformVersion': '7.1.2',
'deviceName': '1b6ca8f',
'noReset': True,
# 'app':'apk路径',
'automationName': 'uiautomator2',
'appPackage': 'com.taobao.taobao',
'appActivity': 'com.taobao.tao.TBMainActivity'
}
driver = webdriver.Remote('127.0.0.1:4723/wd/hub', desired_caps)
time.sleep(10)
driver.find_element_by_id("com.taobao.taobao:id/home_searchedit").click()
代码效果是会打开淘宝App,然后点击搜索框
2)name定位
driver.find_element_by_name()
使用UI Automator Viewer上对应text的值
在较新的版本已经不能使用name来定位,如果使用name的api来定位会报错
3)className定位
driver.find_element_by_class_name()
tab_name定位的方法已被该方法取代
使用UI Automator Viewer上对应的class值,但是一般class值不是唯一的

from appium import webdriver
import time desired_caps = {
'platformName': 'Android',
'platformVersion': '7.1.2',
'deviceName': '1b6ca8f',
'noReset': True,
# 'app':'apk路径',
'automationName': 'uiautomator2',
'appPackage': 'com.taobao.taobao',
'appActivity': 'com.taobao.tao.TBMainActivity'
}
driver = webdriver.Remote('127.0.0.1:4723/wd/hub', desired_caps)
time.sleep(10)
su = driver.find_elements_by_class_name("android.widget.TextView")
print(len(su))

因为classname基本都不会是唯一的,所以使用find_elements。我这边定位到42个。
4.accessibility_id定位
driver.find_element_by_accessibility_id()
官方文档说安卓是用该方法取代name定位方法
使用UI Automator Viewer上对应的content-desc

from appium import webdriver
import time desired_caps = {
'platformName': 'Android',
'platformVersion': '7.1.2',
'deviceName': '1b6ca8f',
'noReset': True,
# 'app':'apk路径',
'automationName': 'uiautomator2',
'appPackage': 'com.baidu.searchbox',
'appActivity': '.MainActivity'
}
driver = webdriver.Remote('127.0.0.1:4723/wd/hub', desired_caps)
time.sleep(10)
driver.find_element_by_accessibility_id('产品大全').click()
使用了百度app来演示。效果是打开百度后,点击右上角的产品大全按钮
5.xpath定位
driver.find_element_by_xpath()
使用xpath来定位
from appium import webdriver
import time desired_caps = {
'platformName': 'Android',
'platformVersion': '7.1.2',
'deviceName': '1b6ca8f',
'noReset': True,
# 'app':'apk路径',
'automationName': 'uiautomator2',
'appPackage': 'com.baidu.searchbox',
'appActivity': '.MainActivity'
}
driver = webdriver.Remote('127.0.0.1:4723/wd/hub', desired_caps)
time.sleep(10)
driver.find_element_by_xpath('/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.TabHost/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout[1]/android.widget.ScrollView/android.widget.LinearLayout/android.widget.LinearLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.TextSwitcher/android.widget.TextView').click()
代码效果是打开百度,然后点击搜索框
官方文档和appium desktop定位工具都提示说尽量不要使用xpath去定位,不稳定。
这些方法都是在Native(大致理解手机桌面上的应用)中常用的,还有一些是webview(浏览器应用,或者打开的是个页面,H5这种)中使用的
driver.find_element_by_link_text()
driver.find_element_by_partial_link_text()
driver.find_element_by_css_selector()
如这些是在webview中使用的
另外还提供了一些定位的方法
driver.find_element_by_android_data_matcher()
driver.find_element_by_android_viewtag()
driver.find_element_by_custom()
driver.find_element_by_image()
data_matcher 是Espresso驱动程序中DataMatcher定位方式。看源码要去下载插件
viewtag 好像是安卓一个样式标签?
custom 是完全不知道干嘛的
image 是用来定位64位编码的图片。但是好像需要安装一些插件
Python3+Appium学习笔记08-元素定位的更多相关文章
- Appium学习笔记4_元素定位方法
Appium之元素定位,如果对Android上如何使用工具获取页面元素有问题的,请转战到这:http://www.cnblogs.com/taoSir/p/4816382.html. 下面主要是针对自 ...
- Python3+Appium学习笔记09-元素定位android_uiautomator
appium是使用了uiautomator的框架的,所以uiautomator所带的定位方式.appium也是支持的 需要使用appium中find_element_by_android_uiauto ...
- UI自动化学习笔记- Selenium元素定位及元素操作
一.元素定位 1. 如何进行元素定位? 元素定位就是通过元素的信息或元素层级结构来定位元素的 2.定位工具 浏览器开发者工具 3.元素定位方式 Selenium提供了八种定位元素方式 id name ...
- Python3+Appium学习笔记01-环境配置(上)
公司可能也有关于对app自动化的一些想法,让我去研究下.当然以移动互联网的热度.对于app自动化测试技术听闻已久.也一直想要去学习.正好.这次可以在工作时间中学习.emmm.希望自己能坚持把这个系列更 ...
- Python3+Appium学习笔记07-元素定位工具UI Automator Viewer
这篇主要说下如何使用UI Automator Viewer这个工具来定位元素.这个工具是sdk自带的.在sdk安装目录Tools目录下找到uiautomatorviewer.bat并启动它 如果启 ...
- Python3+Appium学习笔记05-报错及解决方法
记录一下使用期间各种报错和解决方法,毕竟搜了半天才找到解决方法.另外提示一下.优先看官方文档. 报错前面都是一样,就是说在处理的时候,服务器发生了一个未知的错误.然后才是具体报错信息 1)seleni ...
- selenium3+python3自动化测试学习之网页元素定位
selenium基础实战之定位网页元素技巧 selenium定位网页元素 find_element_by_id,find_element_by_name,find_element_by_class_n ...
- Python3+Appium学习笔记03-启动app
这个是appium相关的官方api地址:http://appium.io/docs/en/about-appium/api/ 如同selenium进行自动化测试时,需要先创建一个浏览器实例一样.在使用 ...
- Python3+Appium学习笔记02-环境配置(下)
配置所需软件及我当前使用的版本: 1)java jdk 1.8.0 2)android sdk 24.4.1 3)Python3 3.7.3 4)Appium-Python-Client 5)n ...
随机推荐
- 最新 开创java校招面经 (含整理过的面试题大全)
从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿.开创等10家互联网公司的校招Offer,因为某些自身原因最终选择了开创.6.7月主要是做系统复习.项目复盘.LeetCode ...
- 最新 花椒直播java校招面经 (含整理过的面试题大全)
从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿.花椒直播等10家互联网公司的校招Offer,因为某些自身原因最终选择了花椒直播.6.7月主要是做系统复习.项目复盘.Leet ...
- opencv根据摄像头名称获取索引值
OpenCV的VideoCapture是一个视频读取与解码的API接口,支持各种视频格式.网络视频流.摄像头读取. 针对一般摄像头的读取,opencv为了实现跨平台读取摄像头时是使用的摄像头索引, V ...
- java中this的使用
java中的this随处可见,用法也多,现在整理有几点:this1.当全局变量跟局部变量重名时,表示使用全局变量(此时this指代本类对象)例有一类class A{ String name; ...
- 服务提供者框架讲解 之 myJDBC
利用一个简单的myJDBC,讲一下'服务提供者框架'的思想.主要是思想 目录 什么是 服务提供者框架 代码讲解 服务接口 服务提供者接口 服务注册API.服务访问API 静态工厂方法 服务实现类 – ...
- Word、Excel、PPT 2016、2013、2010、2007 没有保存或断电导致文件丢失怎么恢复?
1. 前言 没有保存文档还能恢复吗?死机.断电.蓝屏导致来不及保存文档,还能恢复吗?答案当然是可以的!Office中本身就有恢复文档的功能,可以帮助我们最大化的挽回损失. Office2013与Off ...
- 验证码处理+cookie模拟登录
一.背景 相关博文:https://www.jianshu.com/p/9fce799edf1e https://blog.csdn.net/h19910518/article/details/793 ...
- MySQL 数据库连接命令
启动数据库服务 格式: net start 数据库名 net start mysql57 关闭数据库服务 格式: net stop 数据库名 net stop mysql57 链接 ...
- Git 版本恢复命令reset
reset命令有3中方式: git reset -mixed: 此为默认方式,不带任何参数的git reset, 使用这种方式,项目会回退到某个版本,只保留源码,回退commit和index的信息. ...
- css 水平垂直居中 & vertical-align
前言:这是笔者学习之后自己的理解与整理.如果有错误或者疑问的地方,请大家指正,我会持续更新! 已知宽度的元素居中 position定位 + margin负值 绝对定位 + 4个方向全部`0px` + ...