总结

单个元素定位:

driver.find_element_by_accessibility_id(id)
driver.find_element_by_android_uiautomator(uia_string)
driver.find_element_by_class_name(name)
driver.find_element_by_css_selector(css_selector)
driver.find_element_by_id(id_)
driver.find_element_by_ios_predicate(predicate_string)
driver.find_element_by_ios_uiautomation(uia_string)
driver.find_element_by_link_text(link_text)
driver.find_element_by_name(name)
driver.find_element_by_partial_link_text(link_text)
driver.find_element_by_tag_name(name)
driver.find_element_by_xpath(xpath)

多个元素定位:

driver.find_elements_by_accessibility_id(id)
driver.find_elements_by_android_uiautomator(uia_string)
driver.find_elements_by_class_name(name)
driver.find_elements_by_css_selector(css_selector)
driver.find_elements_by_id(id_)
driver.find_elements_by_ios_predicate(predicate_string)
driver.find_elements_by_ios_uiautomation(uia_string)
driver.find_elements_by_link_text(text)
driver.find_elements_by_name(name)
driver.find_elements_by_partial_link_text(link_text)
driver.find_elements_by_tag_name(name)
driver.find_elements_by_xpath(xpath)

其他:

还有两个私有的方法:

driver.find_element(by, value)

driver.find_elements(by, value)

单个元素定位和多个元素定位的区别就是,单个元素定位返回是单个元素,多个元素定位返回的是包含多个元素的一个列表。

这里其他部分的私有方法,因为属于私有的,一般不直接使用。

详细介绍

1. find_element_by_id

用法:通过元素id来查找元素

示例:driver.find_element_by_id('com.android.calculator2:id/digit8')

这里元素id和 UIAutomatorView 中该元素的 resource id是一致的。

这里需要注意的是,Android 4.3 以上系统才会有 resource id。我尝试过 Android 4.2.2系统,结果resource id这里一直是空。

2. find_element_by_accessibility_id(id)

示例:driver.find_element_by_accessibility_id("delete")

这里的accessibility id 跟 UIAutomatorView 中该元素的 content-desc 是一致的。

3. find_element_by_name(name)

用法:通过元素 name 来查找元素

示例:driver.find_element_by_name("Create a new contact")

这里的name跟 UIAutomatorView 中该元素的 Text是一致的。

需要注意的是,最好不要用这种定位方法,因为 Appium v1.0 已经不建议使用通过name进行定位的方式。

4. find_element_by_class_name(name)

用法:通过元素class name来查找元素

示例:driver.find_element_by_class_name("android.widget.Button")

这里的class name跟 UIAutomatorView 中该元素的 class 是一致的。

需要注意的是,由于 class name不是唯一的,所以可能存在一个页面上有多个元素具有相同的class name。

5. find_element_by_xpath(xpath)

用法:通过元素xpath来查找元素

示例:driver.find_element_by_xpath("//android.widget.Button[@text='8']")

通过xpath进行定位的好处是,比较绝对,任何一个元素都可以通过xpath进行定位。

原始的uiautomatorView是看不到 xpath这个属性的,网上有扩展uiautomatorView使其直接显示xpath的教程。

可以直接下载扩展版的 LazyUiAutomatorViewer:自动化测试中级篇——LazyUiAutomatorViewer插件开发和使用说明

扩展版本的LazyUiAutomatorViewer可以看到最下方有xpath属性。当然如果熟悉xpath语法,自己也可以直接通过层次关系写出元素的xpath。

6. find_element_by_android_uiautomator(uia_string)

用法:通过 UiAutomator 中的定位来进行定位

示例:driver.find_element_by_android_uiautomator('new UiSelector().resourceId("com.android.calculator2:id/digit8")')

这里可以通过UiSelector()的多种方式进行定位,上面只是举例采用了 resourceId而已。

其他定位方式

find_element_by_css_selector(css_selector)

find_element_by_tag_name(name)

find_element_by_link_text(link_text)

find_element_by_partial_link_text(link_text)

Appium Python 五:元素定位的更多相关文章

  1. Appium + Python自动化 - 元素定位uiautomatorviewer

    元素定位主要介绍如何使用uiautiomatorviewer,通过定位到页面上的元素,然后进行相应的点击等操作.uiautiomatorviewer是android-sdk自带的一个元素定位工具,非常 ...

  2. Appium+Python之元素定位和操作

    一.常用识别元素的工具 uiautomatorviewer:Android SDK自带的一个工具,在tools目录下     二.元素定位   1.格式:find_element_by_定位方式(va ...

  3. Appium+python自动化-元素定位uiautomatorviewer的使用

    前言 环境搭建好了,下一步元素定位,元素定位本篇主要介绍如何使用uiautomatorviewer,通过定位到页面上的元素,然后进行相应的点击等操作. uiautomatorviewer是androi ...

  4. Appium+python (3) 元素定位(1)

    打开问价夹下面的uiautomatorviewer: 夜神模拟器里的App后,回到uiautomatorviewer: 点击左上角的Device Screenshot,这时你的夜神模拟器页面就会显示在 ...

  5. appium+python自动化32-android_uiautomator定位进阶版

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

  6. appium+python自动化30-list定位(find_elements)

    前言 有时候页面上没有id属性,并且其它的属性不唯一,平常用的比较多的是单数(element)的定位方法,遇到元素属性不唯一,就无法直接定位到了. 于是我们可以通过复数(elements)定位,先定位 ...

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

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

  8. Appium(六):元素定位

    1. 元素定位 对于自动化测试来说,核心技能就是对象的定位了.不管是web页面上的按钮或输入框,还是移动app上的一个按钮或输入框,我们要想对其进行点击或输入操作,前提是要先找到这个对象. webdr ...

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

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

随机推荐

  1. 基于RBGD的mapping

    最近学习RGBD的SLAM,收集了两个RGBD的mapping的开源工具包 1.RGBDSlam2 a.安装方法: #准备工作空间 source /opt/ros/indigo/setup.bash ...

  2. spring---aop(1)---AOP概念

    写在前面 由于spring的事务系列,可以带出spring的aop.spring的事务只是spring的一个具体实现 名词解释 通知.增强处理(Advice) 就是你想要的功能,也就是上说的安全.事物 ...

  3. jquery easyui combobox设置默认选中第一项

    combobox的内容是从后台获取的json, js截取: var data = $('#id').combobox('getData'); $("#id ").combobox( ...

  4. php Function split() is deprecated 的解决办法

    原文地址: http://www.cnblogs.com/mfryf/archive/2012/05/31/2527307.html php升级为5.3后,程序会报 Function split() ...

  5. Spring+Quartz 集群

    这几天给Spring+Quartz的集群折腾得死去活来,google了无数页总算搞定,记下一些要点备以后使用. 单独的Quartz集群在http://unmi.blogjava.net/有Unmi翻译 ...

  6. java通过System.getProperty获取系统属性

    getProperties public static Properties getProperties() 确定当前的系统属性. 首先,如果有安全管理器,则不带参数直接调用其 checkProper ...

  7. CVPR 2015 papers

    CVPR2015 Papers震撼来袭! CVPR 2015的文章可以下载了,如果链接无法下载,可以在Google上通过搜索paper名字下载(友情提示:可以使用filetype:pdf命令). Go ...

  8. 怎样通过terminal得到AWS EC2 instance的ip

    可得到private ip,也是本地的ip.事实上通过ifconfig也能得到: GET http://169.254.169.254/latest/meta-data/local-ipv4 公共ip ...

  9. @JVM新一代的垃圾回收算法

    垃圾回收的瓶颈 传统分代垃圾回收方式,已经在一定程度上把垃圾回收给应用带来的负担降到了最小,把应用的吞吐量推到了一个极限.但是他无法解决的一个问题,就是Full GC所带来的应用暂停.在一些对实时性要 ...

  10. Linux系统多网卡绑定实战

    导读 对于服务器来说,网络设备的稳定也是比较重要的,特别是网卡.在生产型的系统中,网卡的可靠性就更为重要了. 多块网卡绑定到一个IP地址,当一块网卡发生物理性损坏的情况下,另一块网卡自动启用,并提供正 ...