前言

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

组合定位

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

2.id与text属性组合

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

3.class与text属性组合

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

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

父子定位childSelector

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

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

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

兄弟定位fromParent

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

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

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

更多高级技能

上一篇讲到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-8
from appium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from time import sleep
desired_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+text
id_text = 'resourceId("com.baidu.yuedu:id/webbooktitle").text("小说")'
driver.find_element_by_android_uiautomator(id_text).click()

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

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

sleep(2)
# 兄弟关系fromParent
brother = '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()

最新文章

  1. Ajax表单异步上传(包括文件域)
  2. ListView 的优化(原)
  3. CSS里常见的块级元素和行内元素
  4. 转发 win7+iis7.5+asp.net下 CS0016: 未能写入输出文件“c:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files 解决方案
  5. Navicat Premium11.0.20破解版快速安装配置(附文件)
  6. Java 接口中常量的思考
  7. October 8th 2016 Week 41st Saturday
  8. 弹出框以及提示插件lghdialog.js的使用
  9. dij单源最短路纯模板
  10. LRU Cache
  11. Beta版本贡献比
  12. Android WebView访问SSL证书网页(onReceivedSslError)
  13. OpenStack: OVS安装
  14. 收集统计信息让SQL走正确的执行计划
  15. web前端入门
  16. HDU 1022 Train Problem I 用栈瞎搞
  17. 从今天开始学习Java了
  18. 用R处理一组数据的三种方式
  19. mysql练习----More JOIN operations
  20. JDK8新特性02 Lambda表达式02_Lambda语法规则

热门文章

  1. Spring框架学习——AOP的开发
  2. show processlist使用介绍
  3. COGS 2566. [51nod 1129] 字符串最大值
  4. 动手使用ABAP Channel开发一些小工具,提升日常工作效率
  5. Thread源码分析-java8
  6. Asp.Net Core 入门(六)—— 路由
  7. UEditor练习(JSP版)
  8. 【转载】WPF DataGrid 性能加载大数据
  9. python之道05
  10. css--背景和列表