一、元素定位工具

  app应用的元素使用的是控件定位,不同于web网页,web网页定位元素通常使用的是F12工具,那么在app当中我们则要借助其它的工具来辅助定位。

1.uiautomatorviewer.bat

  uiautomatorviewer.bat工具在安装完ADT工具之后,位于ADT安装路径的android-sdk-windows\tools\bin目录下

  

  双击启动即可,启动之后,在初始界面上,点击如图位置按钮可以进行截屏

  

  截屏后即可查看各个元素,截屏后的效果:

  

2.appium检查器

  在appium启动后的日志窗口界面,点击“启动检查器会话”,会跳转到检查器启动参数配置界面,参数配置直接将我们代码里面的启动参数搬过来就可以了。

  

  

  点击启动后,会根据我们配置的应用信息,自动跳转到应用的主页面,我们就可以开始进行元素定位了:

  

二、常用元素定位方法

  appium从selenium中继承了所有的元素定位方法,并且增加了自己的一些方法,我们先看看appium的源码:

  

  但是从继承selenium中的定位方法中,一般只会用到id、class_name、xpath这三种方法,总结起来,appium中常用的定位方法一般有以下五种:

  1. 通过id定位:resource-id
  2. 通过class_name定位:class
  3. 通过accessibility_id定位:content-desc
  4. 通过android_uiautomator定位:SDK自带的java开发的uiautomator自动化框架
  5. 通过xpath定位

  UIAutomator介绍:     

  UIAutomator是安卓移动端的UI自动化框架,要求:Android4.3以上

  • 提供了一系列API:执行UI测试在系统或者第三方app上面
  • 允许在被测设备上执行操作,比如打开系统设置菜单
  • 适合编写黑盒自动化测试

  UIAutomator框架的主要特点:

  1. 元素定位:UI Automator Viewer。扫描、分析待测应用的UI组件的图像工具
  2. 元素操作:Accessing device state。在目标设备和app上各种操作
  3. 元素识别:UI Automator APIs。在多个应用程序中捕获和操作UI组件

1.id定位

driver.find_element_by_id() 或者 MobileBy.ID

注意这里是使用resource-id,而不是id

loc = (MobileBy.ID, 'com.taobao.taobao:id/iv_image')

2.class_name定位

driver.find_element_by_class_name() 或者 MobileBy.CLASS_NAME

直接使用class即可

loc = (MobileBy.CLASS_NAME, 'android.widget.ImageView')

3.accessibility_id定位

driver.find_element_by_accessibility_id() 或者 MobileBy.ACCESSIBILITY_ID

这里使用content-desc即可

loc = (MobileBy.ACCESSIBILITY_ID, '管理')

4.android_uiautomator定位

driver.find_element_by_android_uiautomator() 或者 MobileBy.ANDROID_UIAUTOMATOR

该方法的参数为UiSelector类定位元素的表达式:

new UiSelector().函数名称('定位表达式')

实例化一个UiSelector对象,然后通过实例接口调用,具体用到的一些方法参考官网的说明,网址:https://developer.android.com/training/testing/ui-automator.html#ui-automator-viewer,该网址需要翻墙

这里调用UiSelector对象的text()方法即可,更多的方法请参考上述地址

# 注意字符串必须要用双引号
loc = (MobileBy.ANDROID_UIAUTOMATOR, 'new UiSelector().text("去逛逛")')

5.xpath定位

driver.find_element_by_xpath() 或者 MobileBy.XPATH

注意这里的标签名一定是使用class来作为xpath的标签名,在这里不同于selenium,并且遇到text文本定位的时候,使用的是text而不是text()

loc = (MobileBy.XPATH, '//android.widget.TextView[text="首页"]')

三、组合定位

使用的是UIAumtomator下的方法,因为UiSelector类下的方法都反回了对象本身,因此可以连续调用各种方法,这种使用方法即组合定位

我们可以连续调用三个方法进行组合

loc = (MobileBy.ANDROID_UIAUTOMATOR, 'new UiSelector().className("android.widget.TextView").text("家装").index(2)')

四、父子定位

调用UiSelector类的childSelector()方法,在该方法里面传入子代的元素定位表达式

比如刚刚“家装”的父节点属性如下

那么我们的定位表达式可以通过父子定位来实现

loc = (MobileBy.ANDROID_UIAUTOMATOR, 'new UiSelector().className("android.widget.LinearLayout").childSelector(text("家装"))')

五、兄弟定位

同理,我们调用fromParent()方法,表示定位同级的兄弟元素

已知了“首页”按钮为本元素,text属性为“首页”,则通过该元素来定位“百货元素”

loc = (MobileBy.ANDROID_UIAUTOMATOR, 'new UiSelector().text("首页").fromParent(text("百货"))')

基于appium的常用元素定位方法的更多相关文章

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

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

  2. Appium+Python 自动化-appium常用元素定位方法

    https://www.cnblogs.com/rabbit-testing/p/8042733.html 大牛 https://blog.csdn.net/kaka1121/article/deta ...

  3. Python+Appium自动化测试(6)-元素等待方法与重新封装元素定位方法

    在appium自动化测试脚本运行的过程中,因为网络不稳定.测试机或模拟器卡顿等原因,有时候会出现页面元素加载超时元素定位失败的情况,但实际这又不是bug,只是元素加载较慢,这个时候我们就会使用元素等待 ...

  4. Appium学习笔记4_元素定位方法

    Appium之元素定位,如果对Android上如何使用工具获取页面元素有问题的,请转战到这:http://www.cnblogs.com/taoSir/p/4816382.html. 下面主要是针对自 ...

  5. appium 元素定位方法汇总

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

  6. Appium(十):元素定位(加强版)

    1. 元素定位 写完上一篇元素定位的博客,发现实用性基本为零.这几天真的烦死我了,一直在找资料,还去看了一遍appium官网文档.最后结合着selenium的定位方法,测试出几种可行的元素定位方法. ...

  7. Selenium Web元素定位方法

    Selenium是用于Web应用测试的自动化测试框架,可以实现跨浏览器和跨平台的Web自动化测试.Selenium通过使用WebDriver API来控制web浏览器,每个浏览器都都有一个特定的Web ...

  8. selenium自动化测试——常见的八种元素定位方法

    selenium常用的八种元素定位方法 1.通过 id 定位:find_element_by_id() 2.通过 name 定位:find_element_by_name() 3.通过 tag 定位: ...

  9. 不支持find_element_by_name元素定位方法,抛不支持find_element_by_name元素定位方法,会抛如下错误 org.openqa.selenium.InvalidSelectorException: Locator Strategy 'name' is not supported for this session的解决

    appium1.5后不支持find_element_by_name元素定位方法,会抛如下错误 org.openqa.selenium.InvalidSelectorException: Locator ...

随机推荐

  1. 华为2019年NE40E-X8,承诺命令

    commit每敲一行命令,都得确认一下.以防误操作.

  2. [PHP] 编译安装swoole

    不知道为啥,家里的网访问不了pecl.php.net,这也就没有办法直接使用pecl install swoole安装swoole,也可以直接进行编译安装 在git仓库下载源码 https://git ...

  3. springboot打包 出错 Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.18.1

    遇到这个问题看了很多博客之后发现:执行这个语句就行了:mvn clean package -Dmaven.test.skip=true 本文链接:https://blog.csdn.net/weixi ...

  4. Cocos2d-x.3.0开发环境搭建之—— 极简式环境搭建

    配置:win7 + VS2012 + Cocos2d-x.3.0 + Cocos Studio v1.4.0.1 使用此法可以方便的创建Cocos2d-x项目.如果需要运行Cocos2d-x引擎自带的 ...

  5. python连接sqlite3

    一.了解sqlite sqlite是一种嵌入式数据库,它的数据库就是一个文件.由于SQLite本身是用C写的,而且体积很小,所以经常被集成到各种应用程序中,甚至在IOS和Android的APP中都可以 ...

  6. 荧屏弹幕_新增h5requestAnimationFrame实现

    所有的页面逻辑也是比较简单,用原生js实现,封装也是比较简单!要让页面效果更为炫酷,则可去引入相应的css,背景图片自己去img/下下载引入喔! HTML页面 <!doctype html> ...

  7. Java基础(七)

    左连接,右连接,内连接,全连接的区别 左连接:返回左表所有行,右表没有匹配行则返回null 右连接:返回右表所有行,左表没有匹配行则返回null 内连接:返回左右表共有行 全连接:返回左右表所有行,无 ...

  8. HTML5 3D 在智慧物业/地产管理系统中的应用

    概述 该博文主要展示采用 HT for Web 提供的可视化技术,对智慧房产.智慧物业相关方向的可视化呈现做的一点尝试. 传统的 智慧房产/楼宇自动化/智慧物业 常会采用 BIM(建筑信息模型 Bui ...

  9. 10分钟彻底理解Redis的持久化机制:RDB和AOF

    作者:张君鸿 juejin.im/post/5d09a9ff51882577eb133aa9 什么是Redis持久化? Redis作为一个键值对内存数据库(NoSQL),数据都存储在内存当中,在处理客 ...

  10. Spring Boot 2 快速教程:WebFlux Restful CRUD 实践(三)

    摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘要,谢谢! 这是泥瓦匠的第102篇原创 03:WebFlux Web CR ...