android uiautomator text定位

可能有人不知道为什么说android uiautomator是终极定位,而且android uiautomator和appium有什么关系呢?如果之前写了一些脚本,发现有的时候一些元素不能够很好的定位时,那么就需要采用android uiautomator去定位,他是一种非常强有力的定位方式,原理是通过android 自带的android uiautomator的类库去查找元素,都直接用官方公布出来的方法去找了还能找不到吗?

首先看我们下面的图片:

在上面的图片中我们不采用appium封装好的方法,直接使用android 的uiautomator去定位结果如下:

user = new Uiobject(new UiSelector().text("请输入手机号"))
user.setText("test")

  这两句话看不懂也没关系,因为我们接下来讲的是appium已经对他进行了封装的方法,这里只是让你看一下他原始方法是怎么做的。首先他会根据你的定位信息new一个对象出来,然后再在你new的对象之上进行相关操作。下面我们看一下在appium中的实现方法:

ele = self.driver.find_element_by_android_uiautomator('new UiSelector().text("请输入手机号")')
ele.send_keys("123")

  

两个代码进行比较我们可以发现他们的相同之处只是最后的定位信息是一样的,即:new UiSelector().text("请输入手机号")

,这句话是什么意思呢?简单的话就是根据一定条件来查找元素,我们这里的条件就是text属性为“请输入手机号”,再根据图片去理解是不是很容易呢?

android uiautomator的元素定位其实和appium的定位一样,或者说他比appium的定位方式更佳多以及更佳适用,并不是只有这一个,他也只是className、id等定位,而且还支持模糊匹配进行定位,这样是不是感觉更高大上呢?下面我们简单介绍一下这几种定位方式。

6.6.2 uiautomator text模糊定位

模糊定位故名思义,通过text的部分信息就能够进行定位,我们直接看代码:

ele = self.driver.find_element_by_android_uiautomator('new UiSelector().textContains("请输入手")')
ele.send_keys("123")

  

在上面的代码中我们只是将.text()的方法变成了.textContains(),在方法中传入模糊的数据就好。看到这里是否有人思考过一个问题,既然有类似的模糊寻找,那么有没有像正则表达式一样的查找呢?答案是肯定的,看我们下面的方法。

6.6.3 textMatches 正则匹配查找

textMatches故名思义就是通过正则的来进行查找定位,他也是通过text的属性来进行正则匹配,我们直接看代码:

ele = self.driver.find_element_by_android_uiautomator('new UiSelector().textMatches("^请输入手.*")')
ele.send_keys("123")

  

上面匹配的一些信息可能一些刚做测试的小伙伴不是很了解,这个不要紧,下来可以搜索一下正则表达式教程,稍微了解一下就可以。

6.6.4 uiautomator resourceID定位

resourceId定位和appium封装好的id定位是一样的,只是这里将写法变成了uiautomator的写法而已,看下面代码:

ele = self.driver.find_element_by_android_uiautomator('new UiSelector().resourceId("cn.com.open.mooc:id/et_phone_edit")')
ele.send_keys('234')

  

通过上面的代码和之前的代码对比大家可能发现其实他们前面都是一样的,只是在定位的时候发生了一些变化,text变换成了resourceID即可,也就是页面对象属性的信息进行变更了,其他方法都是一样。下面其他方法我就不浪费篇幅,只给大家做一个简单的案例展示。

6.6.5 resourceIDMatches 定位

通过id进行正则匹配定位

ele = self.driver.find_element_by_android_uiautomator('new UiSelector().resourceIdMatches(".+et_phone_edit")')
ele.send_keys('234')

  

6.6.6 uiautomator className定位

通过调用android uiautomator使用className进行定位

  

ele = self.driver.find_element_by_android_uiautomator('new UiSelector().className("android.widget.EditText")')
ele.send_keys('234')

  

6.6.7 uiautomator classNameMatches定位

通过className正则匹配进行定位

ele = self.driver.find_element_by_android_uiautomator('new UiSelector().classNameMatches (".*EditText")')
ele.send_keys('234')

  通过上面的学习我相信大家对uiautomator的定位有一定的了解了,但是我想告诉大家的是这个并不是所有的,还有很多很多的定位方式,这个需要大家在以后不断的学习中去积累,我也不可能把所有的方法都告诉大家,这里只是给大家一个起头,但是我希望大家在学习定位的时候不只是看appium的定位,毕竟他也是封装的uiautomator的定位方式,所以在学习appium的同时把uiautomator去大概学习一下这个很有帮助,并且对以后的提升自己以及工作中重新封装appium有很大的帮助。

Appium python自动化测试系列之Android UIAutomator终极定位(七)的更多相关文章

  1. Appium python自动化测试系列之Android知识讲解(三)

    ​3.1 ADB工具讲解 3.1.1 什么是ADB呢? 我们不去解释官方语言的翻译,给大家说一个通熟易懂的说法,ADB我理解为他就是电脑和手机连接的桥梁.此连接不是充电的连接,大家不要混淆,说他是一个 ...

  2. Appium+python自动化(十二)- Android UIAutomator终极定位凶“胸”器(七)(超详解)

    简介 乍眼一看,小伙伴们觉得这部分其实在异性兄弟那里就做过介绍和分享了,其实不然,上次介绍和分享的大哥是uiautomatorviewer,是一款定位工具.今天介绍的是一个java库,提供执行自动化测 ...

  3. Appium python自动化测试系列之移动自动化测试前提(一)

    1.1 移动自动化测试现状 因为软件行业越来越发达,用户的接受度也在不断提高,所以对软件质量的要求也随之提高,当然这个也要分行业,但这个还是包含了大部分.因为成本.质量的变化现在对自动化测试的重视度越 ...

  4. Appium python自动化测试系列之认识Appium(四)

    ​4.1界面认识 在之前安装appium的时候说过我们有两种方法安装,也就有两种结果,一种是有界面的,一种是没有界面的,首先我们先讲一下有界面的,以及界面有哪些东西. 首先看第一幅图,如果你的是win ...

  5. Appium python自动化测试系列之appium环境搭建(二)

    ​2.1 基础环境搭建 当我们学习新的一项技术开始基本都是从环境搭建开始,本书除了第一章节也是的,如果你连最基础的环境都没有那么我们也没必要去说太多,大概介绍一下: 1.因为appium是支持andr ...

  6. Appium python自动化测试系列之元素的定位(六)

    ​6.1 常用定位方法讲解 对象定位是自动化测试中很关键的一步,也可以说是最关键的一步,毕竟你对象都没定位那么你想操作也不行.所以本章节的知识我希望大家多动手去操作,不要仅仅只是书本上的知识,毕竟这个 ...

  7. Appium python自动化测试系列之Capability介绍(五)

    ​5.1 Capability介绍 5.1.1 什么是Capability 在讲capability之前大家是否还记得在讲log时给大家看过的启动时的日志?在我们的整个启动日志中会出现一些配置信息,其 ...

  8. Appium python自动化测试系列之等待函数如何进行实战(九)

    ​9.1 等待函数的使用 9.1.1 为什么要使用等待函数 我们在做自动化的时候很多时候都不是很顺利,不是因为app的问题,我们的脚本也没问题,但是很多时候都会报错,比如一个页面本来就有id为1的这个 ...

  9. Appium python自动化测试系列之滑动函数封装实战(八)

    8.1 什么是函数的封装 教科书上函数的封装太官方,我们这里暂且将函数的封装就是为了偷懒把一些有共性的功能或者一些经常用的功能以及模块放在一起,方便我们以后再其他地方调用.这个只是个人的理解所以大家懂 ...

随机推荐

  1. Java学习5——标识符和关键字

    标识符: 1.Java对各种变量.方法和类等要素命名时使用的字符串序列称为标识符.凡是自己可以起名字的地方都叫标识符,都要遵守标识符的规则. 2.Java标识符命名规则: 标识符由字母.下划线&quo ...

  2. 201521123054 《Java程序设计》第5周学习总结

    1. 本周学习总结 2. 书面作业 作业参考文件下载 代码阅读:Child压缩包内源代码 1.1 com.parent包中Child.java文件能否编译通过?哪句会出现错误?试改正该错误.并分析输出 ...

  3. 201521123050 《Java程序设计》第4周学习总结

    1. 本周学习总结 2. 书面作业 1.注释的应用 1.1使用类的注释与方法的注释为前面编写的类与方法进行注释,并在Eclipse中查看.(截图) 2.面向对象设计(大作业1,非常重要) 2.1 将在 ...

  4. 201521123072《java程序设计》第十三周学习总结

    201521123072<java程序设计>第十三周学习总结 1. 本周学习总结 以你喜欢的方式(思维导图.OneNote或其他)归纳总结多网络相关内容. 2. 书面作业 1. 网络基础 ...

  5. 201521123071 《JAVA程序设计》第十四周学习总结

    第14周作业-数据库 1. 本周学习总结 1.1 以你喜欢的方式(思维导图.Onenote或其他)归纳总结多数据库相关内容. 1.使用JDBC将Java程序与数据库连接 1.1注册驱动 Class.f ...

  6. 201521123092《java程序设计》第九周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 2. 书面作业 本次PTA作业题集异常 1.常用异常 题目5-1 1.1 截图你的提交结果(出现学号) 1.2 自己 ...

  7. Linux 的集中重启的方法

    linux中有下面几条命令可以实现重新启动,这些命令都需要root用户的权限: reboot shutdown -r now #立刻重启 shutdown -r #过10分钟自动重启 shutdown ...

  8. jQuery中的常用内容总结(一)

    jQuery中的常用内容总结(一)   前言 不好意思(✿◠‿◠),由于回家看病以及处理一些其它事情耽搁了,不然这篇博客本该上上周或者上周写的:同时闲谈几句:在这里建议各位开发的童鞋,如果有疾病尽快治 ...

  9. CANVAS模仿龙卷风特效

    大学时候,有一段时间对flash比较感兴趣.去图书馆借了一本很厚很厚的falsh书籍. 翻了几页之后,就再没有往后看过.印象比较深的是作者说他用flash完成了一个龙卷风效果. 一直到现在我也没有看到 ...

  10. JQuery&原生js ——实现剪刀石头布小游戏

    前言 jQuery是一个快速.简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库( 或JavaScript框架).jQuery设计的宗旨是“write L ...