博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
appium+python自动化32-android_uiautomator定位进阶版
阅读量:6006 次
发布时间:2019-06-20

本文共 3405 字,大约阅读时间需要 11 分钟。

前言

上一篇介绍uiautomator的定位方式都是类似这种'new UiSelector().xxx("xxx")',看起非常长,我也记不住,这很不python。于是本篇优化了定位方法,去掉该死的'new UiSelector().'

组合定位

1.一般组合用id,class,text这三个属性会比较好一点,其次description这个属性也可以一起两两组合

2.id与text属性组合

# 1.id+textid_text = 'resourceId("com.baidu.yuedu:id/webbooktitle").text("小说")'driver.find_element_by_android_uiautomator(id_text).click()

3.class与text属性组合

sleep(2)# 2.class+textclass_text = 'className("android.widget.TextView").text("图书")'driver.find_element_by_android_uiautomator(class_text).click()

4.其它更多组合,id,class也可以与其它的index,checkable,clickable,password等这些不常用的属性组合,小编试了下不稳定,所以不推荐

1070438-20171116130831577-1935900981.png

父子定位childSelector

1.有时候不能直接定位某个元素,但是它的父元素很好定位,这时候就先定位父元素,通过父元素找儿子。

举个例子:你很喜欢一个女生,但是没她的直接联系方式。你有她爸的联系方式,于是你就可以通过先找她爸,再找到她。

# 父子关系childSelectorson = 'resourceId("com.baidu.yuedu:id/rl_tabs").childSelector(text("小说"))'driver.find_element_by_android_uiautomator(son).click()

1070438-20171116130901406-1432204070.png

兄弟定位fromParent

1.有时候父元素不好定位,但是跟他相邻的兄弟元素很好定位,这时候就可以通过兄弟元素,找到同一父级元素下的子元素。

举个例子:你喜欢一个女生,但是没她的直接联系方式。你跟她哥哥关系是铁哥们,于是你就可以通过她哥哥来找到她。

# 兄弟关系fromParentbrother = 'resourceId("com.baidu.yuedu:id/lefttitle").fromParent(text("图书"))'driver.find_element_by_android_uiautomator(brother).click()

1070438-20171116131017937-1349098159.png

更多高级技能

上一篇讲到text定位有四种方式,那么id,class也是可以正则匹配。我试了下id和class的StartsWith和Contains会报错,所以不推荐了。

1.text

  • text("text文本")
  • textContains("包含text文本")
  • textStartsWith("以text文本开头")
  • textMatches("正则表达式")

2.className

  • className("class属性")
  • classNameMatches("正则表达式")
# classNameMatches(".*xxx$")classMatches = 'classNameMatches(".*TextView$").text("小说")'driver.find_element_by_android_uiautomator(classMatches).click()

3.resourceId

  • resourceId("id属性")
  • resourceIdMatches("正则表达式")
# resourceIdMatches(".*xxx$")idmatches = 'resourceIdMatches(".*id/lefttitle$")'driver.find_element_by_android_uiautomator(idmatches).click()

参考代码

# coding:utf-8from appium import webdriverfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as ECfrom time import sleepdesired_caps = {                'platformName': 'Android',                'deviceName': '127.0.0.1:62001',                'platformVersion': '4.4.2',                'appPackage': 'com.baidu.yuedu',                'appActivity': 'com.baidu.yuedu.splash.SplashActivity',                'noReset': 'true',                'resetKeyboard': 'true',                'unicodeKeyboard': 'true'                }driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)# 等主页面activity出现driver.wait_activity(".base.ui.MainActivity", 10)# 1.id+textid_text = 'resourceId("com.baidu.yuedu:id/webbooktitle").text("小说")'driver.find_element_by_android_uiautomator(id_text).click()sleep(2)# 2.class+textclass_text = 'className("android.widget.TextView").text("图书")'driver.find_element_by_android_uiautomator(class_text).click()sleep(2)# 父子关系childSelectorson = 'resourceId("com.baidu.yuedu:id/rl_tabs").childSelector(text("小说"))'driver.find_element_by_android_uiautomator(son).click()sleep(2)# 兄弟关系fromParentbrother = 'resourceId("com.baidu.yuedu:id/lefttitle").fromParent(text("图书"))'driver.find_element_by_android_uiautomator(brother).click()sleep(2)# resourceIdMatches(".*xxx$")idMatches = 'resourceIdMatches(".*id/lefttitle$")'driver.find_element_by_android_uiautomator(idMatches).click()sleep(2)# classNameMatches(".*xxx$")classMatches = 'classNameMatches(".*TextView$").text("小说")'driver.find_element_by_android_uiautomator(classMatches).click()

在学习过程中有遇到疑问的,可以appium+python QQ群交流:330467341

转载地址:http://mmsmx.baihongyu.com/

你可能感兴趣的文章
64位linux下的gns3网络模拟器配置
查看>>
让VMware ESX中的虚拟机随esx开机自动启动
查看>>
Electron Cash钱包存BCH教程
查看>>
自定义key解决zabbix端口监听取值不准确的问题
查看>>
入门级----黑盒测试、白盒测试、手工测试、自动化测试、探索性测试、单元测试、性能测试、数据库性能、压力测试、安全性测试、SQL注入、缓冲区溢出、环境测试...
查看>>
composer 安装 ubuntu 12.04
查看>>
微服务(二)hystrix
查看>>
Performing a thread dump in Linux or Windows--reference
查看>>
推荐系统中常用算法 以及优点缺点对比
查看>>
cocos2d-x v3.2环境配置(现在3.x版本号可以配置该)
查看>>
Go语言标准库之JSON编解码
查看>>
winpcap 发送数据包
查看>>
linux上架设l2tp+ipsec ***服务器
查看>>
可能是最简单的面向对象入门教程(二)为什么要有类型
查看>>
js常用的函数库
查看>>
Sqlserver 数据库安全
查看>>
netstat命令简单使用
查看>>
Python标示符命名规则
查看>>
SSL certificate problem unable to get local issuer certificate解决办法
查看>>
node.js中使用http模块创建服务器和客户端
查看>>