appium---uiautomator定位方法
前面总结了7种定位方法,今天在介绍一种uiautomator方法,其实appium就是基于uiautomator框架实现的,让我们一起看下uiautomator有哪些定位方法可以使用
uiautomator是什么
UIAutomator是android的自动化测试框架,也是Android-Sdk中一个查看页面组件元素工具
uiautomator定位方法
前面介绍了常规的定位方法,这里uiautomator又提供了3种常用的定位方法,这次我们主要通过uiautomator方法进行介绍,定位的话依旧拿淘宝来做实战

通过Text方法
1、text(“text文本”)
text = 'text("注册/登录")'
driver.find_element_by_android_uiautomator(text).click()
2、文本比较长,可以使用textContains模糊查询定位 textContains('text文本')
text1 = 'textContains("请输入手机号码")'
driver.find_element_by_android_uiautomator(text1).send_keys("")
3、textStartsWith("以text文本开头")
text2 = 'textStartsWith("请输入验证码")'
driver.find_element_by_android_uiautomator(text2).send_keys("")
运行结果:
由于用的是模拟器可能有点卡顿。抱歉哈

代码结果:
from appium import webdriver
import time
desired_caps = {
'platformName': 'Android', # 测试版本
'deviceName': 'emulator-5554', # 设备名
'platformVersion': '5.1.1', # 系统版本
"appPackage": "com.taobao.taobao", # app包名
"appActivity": "com.taobao.tao.welcome.Welcome", # 启动launch Activity
"noReset": True, # 不清空数据
"unicodeKeyboard": True, # 使用Unicode编码方式发送字符串
"resetKeyboard": True, # 键盘隐藏起来
}
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
time.sleep(4)
text = 'text("注册/登录")'
driver.find_element_by_android_uiautomator(text).click()
time.sleep(5)
text1 = 'textContains("请输入手机号码")'
driver.find_element_by_android_uiautomator(text1).send_keys("")
time.sleep(5)
text2 = 'textStartsWith("请输入验证码")'
driver.find_element_by_android_uiautomator(text2).send_keys("")
Class Name方法
这个方法和appium定位方法一样都是通过Class属性进行定位
# 通过class定位登录按钮
className = 'className("android.widget.Button")'
driver.find_element_by_android_uiautomator(className).click()
通过uiautomator工具找到注册/登录按钮的Class属性

resource-id方法
resourceld 和appium中的id一样。
# 通过resourceId定位输入框
id = 'resourceId("com.taobao.taobao:id/aliuser_login_mobile_et")'
driver.find_element_by_android_uiautomator(id).send_keys("")
同意的方法通过uiautomator找到搜索框的id
id和class定位执行结果:

代码结果:
# coding:utf-8
from appium import webdriver
import time
desired_caps = {
'platformName': 'Android', # 测试版本
'deviceName': 'emulator-5554', # 设备名
'platformVersion': '5.1.1', # 系统版本
"appPackage": "com.taobao.taobao", # app包名
"appActivity": "com.taobao.tao.welcome.Welcome", # 启动launch Activity
"noReset": True, # 不清空数据
"unicodeKeyboard": True, # 使用Unicode编码方式发送字符串
"resetKeyboard": True, # 键盘隐藏起来
}
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
time.sleep(6)
# 通过class定位登录按钮
className = 'className("android.widget.Button")'
driver.find_element_by_android_uiautomator(className).click()
time.sleep(5)
# 通过resourceId定位输入框
id = 'resourceId("com.taobao.taobao:id/aliuser_login_mobile_et")'
driver.find_element_by_android_uiautomator(id).send_keys("")
上面写了一些单独的定位方法,其实uiautomator还支持组合定位元素,意思就是支持id和text或者text和className等,这样的定位更加准确,具体的继续往下看吧
组合定位
1、id和text方法组合
# 通过text+ClassName组合 (resourceId(属性).text(属性))
classText = 'className("android.widget.Button").text("注册/登录")'
driver.find_element_by_android_uiautomator(classText).click()
2、class和text方法组合
# 通过text+ID组合 (resourceId(属性).text(属性))
IdText = 'resourceId("com.taobao.taobao:id/aliuser_login_mobile_et").text("请输入手机号码")'
driver.find_element_by_android_uiautomator(IdText).send_keys("")
执行结果:
# coding:utf-8
from appium import webdriver
import time
desired_caps = {
'platformName': 'Android', # 测试版本
'deviceName': 'emulator-5554', # 设备名
'platformVersion': '5.1.1', # 系统版本
"appPackage": "com.taobao.taobao", # app包名
"appActivity": "com.taobao.tao.welcome.Welcome", # 启动launch Activity
"noReset": True, # 不清空数据
"unicodeKeyboard": True, # 使用Unicode编码方式发送字符串
"resetKeyboard": True, # 键盘隐藏起来
}
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
time.sleep(6)
classText = 'className("android.widget.Button").text("注册/登录")'
driver.find_element_by_android_uiautomator(classText).click()
time.sleep(5)
# 通过text+ID组合
IdText = 'resourceId("com.taobao.taobao:id/aliuser_login_mobile_et").text("请输入手机号码")'
driver.find_element_by_android_uiautomator(IdText).send_keys("")
父子定位childSelector
定位的时候我们也可以通过父级找到子级定位

格式:
# 通过父子定位
(父亲属性).childSelector(定位属性)
# 通过父子定位
fuzi = 'resourceId("com.taobao.taobao:id/home_searchbar").childSelector(className("android.widget.EditText"))'
driver.find_element_by_android_uiautomator(fuzi).click()
兄弟定位fromParent
定位也可以通过兄弟之间的完成定位

格式:
# 通过兄弟定位
(兄弟属性).fromParent(定位属性)
# 通过兄弟元素定位
xiongdi = 'resourceId("com.taobao.taobao:id/photoBtn").fromParent(className("android.widget.EditText"))'
driver.find_element_by_android_uiautomator(xiongdi).send_keys(u"牛仔裤")
完成代码:
# coding:utf-8
from appium import webdriver
import time
desired_caps = {
'platformName': 'Android', # 测试版本
'deviceName': 'emulator-5554', # 设备名
'platformVersion': '5.1.1', # 系统版本
"appPackage": "com.taobao.taobao", # app包名
"appActivity": "com.taobao.tao.welcome.Welcome", # 启动launch Activity
"noReset": True, # 不清空数据
"unicodeKeyboard": True, # 使用Unicode编码方式发送字符串
"resetKeyboard": True, # 键盘隐藏起来
}
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
time.sleep(6)
# 通过父子定位
fuzi = 'resourceId("com.taobao.taobao:id/home_searchbar").childSelector(className("android.widget.EditText"))'
driver.find_element_by_android_uiautomator(fuzi).click()
time.sleep(6)
# 通过兄弟定位
xiongdi = 'resourceId("com.taobao.taobao:id/photoBtn").fromParent(className("android.widget.EditText"))'
driver.find_element_by_android_uiautomator(xiongdi).send_keys(u"牛仔裤")
结果:
这个地方没有设置appium的键盘所有导致的是乱码的。

元素定位方面方法非常的多,喜欢那种我们用哪种,哪种简单我们就用那种
感觉安静写的对您有帮助的话,可以点歌关注,不迷路,有哪里写错的或者不懂的可以下方留言!
appium---uiautomator定位方法的更多相关文章
- Python Appium 元素定位方法简单介绍
Python Appium 元素定位 常用的八种定位方法(与selenium通用) # id定位 driver.find_element_by_id() # name定位 driver.find_ ...
- appium 元素定位方法汇总
以上图为例,要定位到右下角的 我的 ,并点击 # appium的webdriver提供了11种元素定位方法,在selenium的基础上扩展了三个,可以在pycharm里面输入driver.find_e ...
- Robotframework + Appium 之常用元素定位方法
任何自动化测试,其实手动测试也是一样的,元素定位(目标定位)是首要任务,这是最直接的测试对象呀! 好了,废话不多说,又到了元素定位啦,之前我们已经介绍过selenium及appium常用的定位方法,下 ...
- UIAutomator定位简介
UIAutomator元素定位是 Android 系统原生支持的定位方式,虽然与 xpath 类似,但比它更加好用,且支持元素全部属性定位.定位原理是通过android 自带的android uiau ...
- appium元素定位总结
appium元素定位方法总结 使用uiautomator定位 driver.find_element_by_android_uiautomator(uia_string) 根据resourceId属性 ...
- 【转】UIAutomator定位Android控件的方法实践和建议(Appium姊妹篇)
原文地址:http://blog.csdn.net/zhubaitian/article/details/39777951 在本人之前的一篇文章<<Appium基于安卓的各种FindEle ...
- UIAutomator定位Android控件的方法实践和建议(Appium姊妹篇)
在本人之前的一篇文章<<Appium基于安卓的各种FindElement的控件定位方法实践和建议>>第二章节谈到Appium可以通过使用UIAutomator的方法去定位And ...
- MonkenRunner通过HierarchyViewer定位控件的方法和建议(Appium/UIAutomator/Robotium姊妹篇)
1. 背景 在使用MonkeyRunner的时候我们经常会用到Chimchat下面的HierarchyViewer模块来获取目标控件的一些信息来辅助我们测试,但在MonkeyRunner的官网上是没有 ...
- UIAutomator定位Android控件的方法
UIAutomator各种控件定位的方法. 1. 背景 使用SDK自带的NotePad应用,尝试去获得在NotesList那个Activity里的Menu Options上面的那个Add note菜单 ...
随机推荐
- Android Recovery升级原理
摘要 Recovery模式指的是一种可以对安卓机内部的数据或系统进行修改的模式(类似于windows PE或DOS).也可以称之为安卓的恢复模式,在这个所谓的恢复模式下,我们可以刷入新的安卓系统,或者 ...
- [Linux] 安装grafana并且添加influxdb监控
安装grafana,官网提供了ubuntu的安装包,直接进行安装 wget https://dl.grafana.com/oss/release/grafana_6.5.1_amd64.deb dpk ...
- [Linux] Nginx服务下统计网站的QPS
单位时间的请求数就是QPS,那么在nginx服务的网站下,如果要统计QPS并且按从高到低排列,需要使用awk配合sort进行处理awk做的主要工作是把access每行日志按分隔符分开,然后循环每一行, ...
- mysql-installer-community-8.0.17.0.msi安装教程
1.官网 https://dev.mysql.com/downloads/file/?id=488055 我选择自定义安装 注意这里是可以设置路径的,否则是默认地址 然后一直下一步就好 也是一路下一步 ...
- 手机号码生成器app有吗,怎么使用的呢?
手机号码生成器app是有的,他有手机号码生成器安卓版,也有手机号码生成器苹果版的.很多人会误解他的功能以为是拿来生成号码来接验证码的,其实他不是拿来接短信的.它是用来给别人做营销找客沪的找客源的,接不 ...
- 在 VS 中查看所有线程
查看当前所有线程 在程序中打断点,然后启动调试(注意:线程窗口需要启动调试才可以看得到)点击 Debug > Windows > Threads 线程窗口如下:
- 11.web5
先补充点小知识: 关于jjencode 和 aaencode(颜文字) 1.什么是jjencode? 将JS代码转换成只有符号的字符串 2.什么是aaencode? 将JS代码转换成常用的网络表情 ...
- 【2019.8.20 NOIP模拟赛 T3】小X的图(history)(可持久化并查集)
可持久化并查集 显然是可持久化并查集裸题吧... 就是题面长得有点恶心,被闪指导狂喷. 对于\(K\)操作,直接\(O(1)\)赋值修改. 对于\(R\)操作,并查集上直接连边. 对于\(T\)操作, ...
- HTML引入JS、CSS的各种方法
直接上代码,相信大家是看得懂的,最好的办法是把代码粘过去,自己修改试试,看看效果! 上面是刚开始的执行效果,相应的html,js,css展示如下: index.html <!DOCTYPE ht ...
- JWT的优点和实现Token认证的安全问题
JWT的优点和实现Token认证的安全问题 一.什么是JWT JWT——Json web token 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准,可实现无状态.分布式的Web应 ...
