appium之android_uiautomator定位进阶版_黄小二哥的博客-程序员宅基地

前言

上一篇介绍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()

转载于:https://www.cnblogs.com/xiaohuhu/p/9895253.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_30855761/article/details/97185533

智能推荐

为什么Aplha test会使得Early-z失效?_xdt89460的博客-程序员宅基地

如图1、假如开启了EarlyZ,但是没有开启AlphatTst,那么执行片段着色器的时候,B中被A所遮盖的那片粉红色区域就不会执行片段着色器了。但是,如果同时开启了Early-Z和AlphaTest,如果A的alphatest不通过,则把A丢弃,不写入深度值,但是因为已经执行了EarlyZ,B被A遮盖的那片部分不会执行片段着色器,所以本来这时候正确的显示效果应该是只显示B,但是现在A和B都没有了…2、所以如果开启了Alphatest,就会关闭Early-z,A如果Alphatest通过,就会在深度缓.

python详细步骤计算信息增益_spartanfuk的博客-程序员宅基地_python计算信息增益

信息增益(gain):表示得知特征X的信息使得类Y的信息不确定性减少的程度。例如属性a的信息增益为:信息增益就是等于某个属性的熵减去该属性的条件信息熵。熵的计算公式:条件熵的计算公式:##############################################################################自定义一份数据,分别计算信息熵,...

Oracle SQL optimizer cost model_cuipeng3714的博客-程序员宅基地

Starting with Oracle9i you have the ability to view the estimated CPU, TEMP and I/O costs for every SQL execution ...

在linux中切换命令界面,Linux如何从图形界面切换到命令界面_灰机锅的博客-程序员宅基地

1、手工切换:在图形界面中找一个可以输入命令的地方(RedHat9中默认是按alt+F2,或者从菜单:系统工具→终端打开)输入init 3 回车(注意init后面有一个空格),等一会就进入了命令界面,用init 5可以回到图形界面。2、如果想开机自动进纯文本模式,用文本编辑器打开文件/etc/inittab,找到其中的:id:5:initdefault:这行指示启动时的运行级是5,也就是图形模式,...

linux shell为什么重要,为什么要有shell编程_徐枭涵的博客-程序员宅基地

第一部分 热身++++++++++++++++shell是一个命令解释器.是介于操作系统kernel与用户之间的一个绝缘层.准确地说,它也是一一种强力的计算机语言.一个shell程序,被称为一个脚本,是一种很容易使用的工具,它可以通过将系统调用,公共程序,工具,和编译过的二进制程序粘合在一起来建立应用.事实上,所有的UNIX命令和工具再加上公共程序,对于shell脚本来说,都是可调用的.如果这些你...

CU的递归划分详细介绍_智眸之音-程序员宅基地

CU的划分是递归的第一步  CU的大小为64x64, 搜索最优的PU的划分得到最优的预测模式,进行TU的划分  第二步  CU的大小为32x32, 第一个CU(按之子扫描顺序) 同上第三步  CU的大小为16x16, 第一个CU  同上第四步  CU的大小为8x8,   以此进行第一个CU,第二个CU,第三个CU和第四个CU的PU和TU的划分和最优模式的选择。这里面完成每个CU后将...

随便推点

oracle RAC集群日志,rac心跳-日志分析_唐家气球兵的博客-程序员宅基地

3 ocssd进程日志Node rac102的ocssd进程CSSD]2013-02-02 05:30:04.937 [1197242688] >TRACE: clssnmPollingThread: node rac101 (1) missed(3) checkin(s)[ CSSD]2013-02-02 05:30:05.938 [1197242688] >TRACE:...

[乐意黎转载]AngularJS快速入门指南01:导言_打杂人-程序员宅基地

AngularJS使用新的attributes扩展了HTMLAngularJS对单页面应用的支持非常好(SPAs)AngularJS非常容易学习现在就开始学习AngularJS吧!关于本指南  本指南旨在帮助你尽可能快速而有效地学习AngularJS。通过该指南你会学习到AngularJS的一些基本特性,例如指令、表达式、过滤器、模块和控制器等。以及其它所有

java中startsWith与endsWith的用法_EvanJames的专栏-程序员宅基地_java的startswith

if(a.startsWith(b)) //判断字符串a 是不是以字符串b开头. if(a.endsWith(b)) //判断字符串a 是不是以字符串b结尾.startsWith方法测试此字符串从指定索引开始的子字符串是否以指定前缀开始。语法1 public boolean startsWith(String prefix , int toffset) 

LOJ#6072. 「2017 山东一轮集训 Day5」苹果树 解题报告_日居月诸的博客-程序员宅基地

LOJ#6072. 「2017 山东一轮集训 Day5」苹果树 解题报告好苹果会组成连通块,整棵树的权值为∑i=1nci[ci≥0][siznum(ci)>1]\sum_{i=1}^nc_i[c_i\ge 0][siz_{num(c_i)}>1]i=1∑n​ci​[ci​≥0][siznum(ci​)​>1]设原树中有 mmm 个好苹果,当有 kkk 个好苹果计入权值(即形成了 siz>1siz>1siz>1 的连通块),m−km-km−k 个好苹果不计入权值(

Android开源:网络框架volley使用(一)---使用方法笔记_weixin_33811961的博客-程序员宅基地

1.Get方法获取字符串:1234567891011121314151617181920212223publicvoidloadGetJson(Stringurl){//创建RequestQueue对象,一个activity创建一个对象即可...

linux下已经真确安装oracle后登录sqlplus command not found_weixin_30359021的博客-程序员宅基地

找不到sqlplus 也就是$PATH 环境变量下面没有把oracle_home\bin 目录加到环境变量里面。直接执行echo $PATH 发现没有。因为安装的时候记得在安装用户下面是设置过环境变量的。(如果是在系统的环境变量下面设置的就/etc/profile 里面查看下)进入到安装oracle 的用户的主目录下面,我的在/home/oracle 查看.bash_profile ...

推荐文章

热门文章

相关标签