前面总结了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定位方法的更多相关文章

  1. Python Appium 元素定位方法简单介绍

    Python  Appium  元素定位 常用的八种定位方法(与selenium通用) # id定位 driver.find_element_by_id() # name定位 driver.find_ ...

  2. appium 元素定位方法汇总

    以上图为例,要定位到右下角的 我的 ,并点击 # appium的webdriver提供了11种元素定位方法,在selenium的基础上扩展了三个,可以在pycharm里面输入driver.find_e ...

  3. Robotframework + Appium 之常用元素定位方法

    任何自动化测试,其实手动测试也是一样的,元素定位(目标定位)是首要任务,这是最直接的测试对象呀! 好了,废话不多说,又到了元素定位啦,之前我们已经介绍过selenium及appium常用的定位方法,下 ...

  4. UIAutomator定位简介

    UIAutomator元素定位是 Android 系统原生支持的定位方式,虽然与 xpath 类似,但比它更加好用,且支持元素全部属性定位.定位原理是通过android 自带的android uiau ...

  5. appium元素定位总结

    appium元素定位方法总结 使用uiautomator定位 driver.find_element_by_android_uiautomator(uia_string) 根据resourceId属性 ...

  6. 【转】UIAutomator定位Android控件的方法实践和建议(Appium姊妹篇)

    原文地址:http://blog.csdn.net/zhubaitian/article/details/39777951 在本人之前的一篇文章<<Appium基于安卓的各种FindEle ...

  7. UIAutomator定位Android控件的方法实践和建议(Appium姊妹篇)

    在本人之前的一篇文章<<Appium基于安卓的各种FindElement的控件定位方法实践和建议>>第二章节谈到Appium可以通过使用UIAutomator的方法去定位And ...

  8. MonkenRunner通过HierarchyViewer定位控件的方法和建议(Appium/UIAutomator/Robotium姊妹篇)

    1. 背景 在使用MonkeyRunner的时候我们经常会用到Chimchat下面的HierarchyViewer模块来获取目标控件的一些信息来辅助我们测试,但在MonkeyRunner的官网上是没有 ...

  9. UIAutomator定位Android控件的方法

    UIAutomator各种控件定位的方法. 1. 背景 使用SDK自带的NotePad应用,尝试去获得在NotesList那个Activity里的Menu Options上面的那个Add note菜单 ...

随机推荐

  1. ABP入门教程7 - 基础设施层更新数据库

    点这里进入ABP入门教程目录 设置数据库 在基础设施层(即JD.CRS.EntityFrameworkCore)打开数据库环境设置 JD.CRS.EntityFrameworkCore/EntityF ...

  2. aws创建ec2虚拟机

    利用亚马逊AWS搭建个人服务器 https://www.jianshu.com/p/a045d4217175 https://segmentfault.com/a/1190000019201071?u ...

  3. MSSQL 删除数据库表数据

    --删除数据库表数据 慎用 create PROCEDURE sp_DeleteAllData AS ) ) ) ) ) ) begin try begin tran -- 失效索引,触发器 open ...

  4. MySql 库/表级操作 及 数据类型

    数据库分类 关系型数据库(SQL):存储方式固定,安全 非关系型数据库(NoSQL):存储方式比较灵活,存储数据的效率比较高,不太安全 MySQL是一种关系型数据库管理系统(采用关系模型来组织管理数据 ...

  5. 服务器安装neo4j

    neo4j是目前最流行的图形数据库,支持完整的事务.在树形图中,图是有顶点.边和属性组成的,顶点和边都可以设置属性,顶点又称节点,边也叫做关系.每个节点和关系都可以有一个或多个属性,neo4j创建的图 ...

  6. 使用 Scrapy 的 ImagesPipeline 下载图片

    下载 百度贴吧-动漫壁纸吧 所有图片 定义item Spider spider 只需要得到图片的url,必须以列表的形式给管道处理 class PictureSpiderSpider(scrapy.S ...

  7. mock 模拟数据在框架中的简单使用

    首先在框架中需要安装mock模块 cnpm i mockjs -S 其次在src文件夹下新建mock文件夹,在mock文件夹中新建一个index.js文件 代码如下: const Mock = req ...

  8. <Array> 309 (高)334

    309. Best Time to Buy and Sell Stock with Cooldown class Solution { public int maxProfit(int[] price ...

  9. HTML文件通过jQuery引入其他HTML文件报错has been blocked by CORS policy

    HTML通过jQuery引入模板 完整报错 新创建一个chrome快捷方式,命名为chrome-debug 右键属性,在目标后添加参数,原始路径如下 "C:\Program Files (x ...

  10. js实现addClass方法,classList与className有什么区别?

     壹 ❀ 引 Jquery中addClass与removeClass是两个使用高频的方法,对于为dom元素增删class类非常方便:但如果不用JQ,使用js怎么模拟它们呢?本文主要记录下自己的实现思路 ...