Appium根据xpath获取控件实例随笔
来源:互联网 发布:怎样做淘宝网店 编辑:程序博客网 时间:2024/06/03 13:10
如文章《Appium基于安卓的各种FindElement的控件定位方法实践》所述,Appium拥有众多获取控件的方法。其中一种就是根据控件所在页面的XPATH来定位控件。
本文就是尝试通过自己的试验来尝试对Appium如何用xpath来定位控件做一个阐述,当中如有不对的地方敬请大家指出。
1. 背景
本文尝试使用的试验对象是SDK自带的NotePad应用实例,假设已经有两个Notes分别是“note1”和“note2”添加到Notepad上面,我们要做的就是尝试用xpath的方法来定位“note2”这个ListView下面的TextView控件。
注意界面上有3个TextView类型的控件:
- 最上面的作为整个ListView的Title文本为“Notes”的TextView,Index为0
- 中间的文本为“note2”的TextView,Index也是0
- 最下面的文本为“note1”的TextView,Index是1
2. xPath获取控件方式
2.1 通过判断控件属性获取控件
控件的所有属性都可以用作判断,比如它的text,index,resource-id是否clickable等,例如:
2.1.1 通过文本查找目标控件
el = driver.findElementByXPath("//android.widget.TextView[contains(@text,'note2')]"); assertThat(el.getText(),equalTo("note2"));
2.1.2 通过index查找目标控件
如果我们像下面的方式使用index为0来查找控件note2,那么将会失败,因为该xpath只是说“我要查找页面上android.widget.TextView类型的index为0的控件“,但如背景所说我们事实上有3个TextView控件,其中最上面的和中间的控件他们的Index都是0.所以最终获得的控件其实是Appium第一个找到的最上面文本为”Notes“的TextView。el = driver.findElementByXPath("//android.widget.TextView[contains(@index,0)]"); assertThat(el.getText(),equalTo("note2"));那么我们就要想办法加多点路径,让xpath能分辨出需要的是下面的index为0的TextView,而不是上面的。观看上图的UIAutomatorViewer控件的分层结构,发现这两个TextView是从LinearLayout开始分叉的,所以我们应该从该路径开始通过数组下标指定我们需要的是”在LinearLayout下面的第二个FrameLayout下面的ListView下面的Index为0的TextView:
el = driver.findElementByXPath("//android.widget.LinearLayout[1]/android.widget.FrameLayout/android.widget.ListView/android.widget.TextView[contains(@index,0)]"); assertThat(el.getText(),equalTo("note2"));
2.1.3 通过其他属性查找目标控件
TBD,这些就不一一列举了,参照以上两个示例进行实现就可以了
2.2 通过指定选择集合的位置获得控件
按照我的实践和理解,通过这种方式获取控件是不靠谱的,起码存在两个问题。- 问题1:控件在集合中的位置是不可控的。
el = driver.findElementByXPath("//android.widget.TextView[1]"); assertThat(el.getText(),equalTo("note2"));以上的例子我原意是想把UIAutomatorViewer里面的上中下3个TextView中的中间那个给找出来,但结果返回来给我的确实最上面的那个“Notes”。
- 问题2:通过增加路径层数限制查找指定元素集合不起效。
el = driver.findElementByXPath("//android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.FrameLayout/android.widget.ListView/android.widget.TextView[0]"); assertThat(el.getText(),equalTo("note2"));以上例子我本意是想通过增加父路径的限制来表明“我想要的控件是ListView下面的那两个TextView控件中的第一个”,但返回给我的是“An unknown server-side error occurred while processing the command",感觉是越界了的样子。
2.4 xpath用法官方手册
至于其他非主流获的通过xpath取控件的方式,请参考xpath官方手册中文版:http://wenku.baidu.com/link?url=tLdn9X4ucgmzYyKj4dpsgSDbshXEw6W8BTyqQAXd0kTMY6lBQqLiIL9FHtcZmdIeO8o5ZKV-fzlw96mFgvmWZ-qz35EPObyv8hKLTuyxbv3作者
自主博客
微信
CSDN
天地会珠海分舵
http://techgogogo.com
服务号:TechGoGoGo
扫描码:
http://blog.csdn.net/zhubaitian
3 0
- Appium根据xpath获取控件实例随笔
- Appium根据xpath获取控件实例随笔
- Appium根据xpath获取控件实例随笔
- Js根据xpath获取元素
- Appium的xpath路径获取(包含其他定位方式)
- Appium 关于 appium 的原生控件的 xpath 定位问题及常用方法
- 根据控件ID获取控件
- appium native xpath
- appium 之Xpath使用
- Appium通过xpath定位
- Appium 获取元素控件及其属性
- Appium 获取元素控件及其属性
- appium使用uiautomatorviewer获取APP控件位置
- 根据电话号码获取联系人实例
- Appium中xpath的使用
- XPath实例
- XPath 实例
- XPath 实例
- 将项目从Django 1.4 升级至Django 1.6.2 源码修改的三个步骤
- 运算符的优先级
- 利用正则表达式匹配字符中多少个字母,数字,空格
- 操作系统篇
- Java编程算法基础----递归原理分析
- Appium根据xpath获取控件实例随笔
- JVM 内存泄露简单示例
- UVA 10534Wavio Sequence(LIS)
- 下载的性能优化
- hdu 1540 Tunnel Warfare(线段树)
- Java多线程面试图
- Winpcap网络编程二之环境配置,Eclipse配置C/C++环境
- hdu 1542 Atlantis(扫描线)
- 三整数排列的3种方法