使用uiautomatorviewer.bat工具来找到属性定位元素,在SDK的tools目录下找到该工具,双击打开。左边框内展示app的界面元素,右上角框内展示元素的层级关系,右下角框内展示元素的属性。

1.使用id定位元素

resource-id代表id属性,使用方法:

driver.findElement(By.id("com.android.calculator2:id/digit5")).click();//点击5

2.使用name定位元素

text代表name属性,使用方法:

driver.findElement(By.name("5")).click();

3.使用class定位元素

class就是class属性,class属性定位出元素有可能有很多,定位到某一个元素需要其他条件,使用方法:

  1. @Test
  2. public void testcase3(){
  3. List<WebElement> list = driver.findElements(By.className("android.widget.Button"));
  4. for (WebElement elem:list){
  5. System.out.println(elem);
  6. }
  7. }

4.使用xpath定位元素

需要注意:Appium中属性class的代表标签的名字,下标是从1开始的。

元素的属性具有唯一性时:

driver.findElement(By.xpath("//android.widget.TextView[contains(@resource-id,'com.android.mms:id/action_compose_new')]")).click();
driver.findElement(By.xpath("//android.widget.TextView[@text='New message']")).click();

xpath定位中的标签之间的父子关系和兄弟关系:

图中框1中的三个标签是兄弟关系,框2中的两个标签为父子关系。

兄弟关系:

如果想定位最后一个LinearLayout,可以使用preceding-sibling::表示定位当前标签的哥哥标签,following-sibling::表示定位当前标签的弟弟标签,方法如下:

        driver.findElement(By.xpath("//android.widget.FrameLayout[1]/following-sibling::android.widget.FrameLayout[2]")).click();

通过following-sibling找到第一个标签LinearLayout的第二个弟弟,也就是定位第三个LinearLayout标签。

同理定位第一个标签,通过找到第三个标签的第二个哥哥,就是第一个LinearLayout标签。

driver.findElement(By.xpath("//android.widget.FrameLayout[3]/preceding-sibling::android.widget.FrameLayout[2]")).click();

上面的两种情况可能不适合使用preceding-sibling::和following-sibling::,只是用来举例它们的使用方法。

父子关系:

如果想定位TextView标签,可以使用parent::或者..表示父亲标签,定位框2中的TextView标签。

        driver.findElement(By.xpath("//android.widget.FrameLayout[2]/parent::android.view.View/android.widget.FrameLayout[3]/android.widget.TextView")).click();

通过parent::找到第二个LinearLayout的父标签View,父标签的第三个子标签LinearLayout的第一个子标签就是TextView标签。

5.Accessibility ID定位,Appium的扩展方法

找到元素的content-desc属性来定位。

  1.        driver.findElement(By.name("7")).click();
  2. driver.findElementByAccessibilityId("divide").click();
  3. driver.findElement(By.name("2")).click();
  4. driver.findElementByAccessibilityId("equals").click();

6.使用AndroidAutomator定位,Appium的扩展方法

description就是content-desc属性。

  1.         driver.findElementByAndroidUIAutomator("new UiSelector().text(\"9\")").click();
  2. driver.findElementByAndroidUIAutomator("new UiSelector().description(\"plus\")").click();
  3. driver.findElementByAndroidUIAutomator("new UiSelector().resourceId(\"com.android.calculator2:id/digit6\")").click();
  4. driver.findElementByAndroidUIAutomator("new UiSelector().description(\"equals\")").click();

参考博客:https://testerhome.com/topics/7129

https://www.cnblogs.com/testway/p/6225415.html

http://www.testclass.net/appium/appium-base-find-element/#

Appium的常用定位方法的更多相关文章

  1. Appium Android 元素定位方法 原生+H5

    APPIUM Android 定位方式   1.定位元素应用元素 1.1通过id定位元素 Android里面定位的id一般为resrouce-id: 代码可以这样写: WebElement eleme ...

  2. python+selenium实现163邮箱登陆—iframe动态ID定位 及常用定位方法

    今天发现之前的登录163邮箱脚本定位不到iframe了,原因是iframe拼接了动态ID,修改后的脚本如下: from selenium import webdriver driver = webdr ...

  3. Selenium3+python自动化007-Selenium常用定位方法

    自动化测试只要掌握四步操作:获取元素,操作元素,获取返回结果,断言(返回结果与期望结果是否一致),最后自动出测试报告.元素定位在这四个环节中是至关重要的,如果说按学习精力分配的话,元素定位占70%:操 ...

  4. 【APP自动化】Appium Android 元素定位方法 原生+H5

    参考资料: http://blog.csdn.net/vivian_ljx/article/details/54410024

  5. selenium 之定位方法

    1 id 定位 driver.find_element_by_id() HTML 规定id 属性在HTML 文档中必须是唯一的.这类似于公民的身份证号,具有很强的唯一性 from selenium i ...

  6. xpath定位方法小结(转载)

    1.实例化一个浏览器WebDriver driver = new FirefoxDriver(); 2.driver.get() get传参数到浏览器中 3.常用定位方法webelement XX=d ...

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

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

  8. 基于appium的常用元素定位方法

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

  9. Python Appium 元素定位方法简单介绍

    Python  Appium  元素定位 常用的八种定位方法(与selenium通用) # id定位 driver.find_element_by_id() # name定位 driver.find_ ...

随机推荐

  1. 2.Linux下安装Jenkins

    1.安装jenkins的前提是安装好jdk环境,自行安装jdk,若安装成功后,使用一下命令即可成功安装jenkins: wget -O /etc/yum.repos.d/jenkins.repo ht ...

  2. WPF案例:如何设计搜索框(自定义控件的原则和方法)

    我们平时自定义WPF控件的方法有:Style,DataTemplate,ControlTemplate, DependencyProperty, CustomControl等几个方法. 按照优先顺序应 ...

  3. laravel count的使用

    rt 学习源头: https://blog.csdn.net/chajinglong/article/details/51954010 四.聚合 查询构建器还提供了各种聚合方法,如统计,马克斯,min ...

  4. WebForm中创建树节点TreeNode

    Tree: namespace ECTECH.NorthSJ.Web.SysData { public partial class testTree : BasePage { ; protected ...

  5. 2017-09-17 python 学习笔记

    Mock 库 介绍: http://blog.csdn.net/chdhust/article/details/50663729   说明mock能做什么. 可以考虑在调试方法时使用 Mock 库

  6. SpringMVC---依赖注入与面向切面

    1.依赖注入与面向切面 1.1.出现背景 ——如何简化java开发? 其中很重要的一点是“组件化”. ——如何更好的“组件化”? 松耦合,以及尽可能的让组件专注于本身. ——Spring框架的目的也只 ...

  7. PowerDesignerPDM中搜寻表名或字段名

    Option   Explicit ValidationMode   =   True InteractiveMode =   im_Batch Dim   mdl   '当前model '获取当前活 ...

  8. HeapCreate深入研究

    本机:win7(x86),4G内存 #include"stdafx.h"#include<windows.h>#include<stdio.h>#inclu ...

  9. java 多线程系列基础篇(五)之线程等待与唤醒

    1.wait(), notify(), notifyAll()等方法介绍 在Object.java中,定义了wait(), notify()和notifyAll()等接口.wait()的作用是让当前线 ...

  10. NSOperation/NSOperationQueue详细使用介绍

      一.简介 (1)是使用GCD实现的一套Objective-C的API (2)是面向对象的线程技术 (3)提供了一些在GCD中不容易实现的特性,如:限制最大并发数量.操作之间的依赖关系   NSOp ...