【appium】根据xpath定位元素
2015-08-18 11:23
225 查看
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
![](http://images.cnblogs.com/cnblogs_com/paulwinflo/724761/o_aqiYvy2.jpg)
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"));
相关文章推荐
- Swift-初学
- Android开发之Viewpager与TextView结合使用时不能滑动的问题
- android jni 打印信息到logcat
- How to get md5 and SHA1 in objective c (iOS sdk)
- 使Eclipse或AndroidStudio的代码模板自动生成类名和方法名
- 用命令行cmd 编译小程序
- 获取iOS应用的URL Schemes
- Unity NGUI 资源下载
- android全局处理非捕捉异常
- 使用Xcode HeaderDoc和Doxygen文档化你的Objective-C和Swift代码
- IOS开发之简单计算器
- 给ubuntu中的软件设置desktop快捷方式(以android studio为例)
- Cocos2d-x学习笔记(十三)—— 数据解析(json/xml)
- Component Object Model
- Android Material Design ProgressBar 使用经验(导入,颜色自定义等)
- 深入理解Objective-C:方法缓存
- Objective-C属性
- Android启动过程——init,Zygote,SystemServer
- iOS 自定义TabBarController
- android View/ViewGroup 的生命周期总结笔记