Appium依据xpath获取控件实例随笔「建议收藏」

Appium依据xpath获取控件实例随笔

大家好,又见面了,我是全栈君。

如文章《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
Appium依据xpath获取控件实例随笔「建议收藏」


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

扫描码:

Appium依据xpath获取控件实例随笔「建议收藏」

http://blog.csdn.net/zhubaitian


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/115712.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • log4cpp深度封装[通俗易懂]

    log4cpp深度封装[通俗易懂]简介关于log4cpp的介绍与好处就不再赘言了,百度一搜一大把。主要是对于log4cpp的使用如果不封装一下,感觉还是挺麻烦的,例如不少函数名挺长的。所以自己动手把它的日常使用进行了封装,可以让使用log4cpp就像调用一句printf()函数一样简单快捷。封装目标不需要用一次就调用一次getInstance,只需要在main文件中引入一次即可封装成需要使用时只需简短的一举logError(“s

    2022年7月13日
    11
  • 腾讯面试居然跟我扯了半小时的CountDownLatch

    腾讯面试居然跟我扯了半小时的CountDownLatch一个长头发、穿着清爽的小姐姐,拿着一个崭新的Mac笔记本向我走来,看着来势汹汹,我心想着肯定是技术大佬吧!但是我也是一个才华横溢的人,稳住我们能赢。

    2022年7月13日
    13
  • 分布式开放消息系统(RocketMQ)的原理与实践(转载)「建议收藏」

    分布式开放消息系统(RocketMQ)的原理与实践(转载)「建议收藏」文章转载自:简书:http://www.jianshu.com/p/453c6e7ff81c一年前为了一次内部分享而写的这篇文章,没想到会有这么多人阅读,抽空更新一版,对文中一些晦涩的语句做了修正,删除了一些口水话和附录内容,尽量给大家更好的阅读体验 (第二版更新于2017年春节)。分布式消息系统作为实现分布式系统可扩展、可伸缩性的关键组件,需要具有高吞吐量、高可用等特点。而谈到消

    2022年6月17日
    27
  • Android解析中国天气网的Json数据

    Android解析中国天气网的Json数据

    2022年1月29日
    41
  • 【高精度】【找规律】Gym – 101243B – Hanoi tower

    【高精度】【找规律】Gym – 101243B – Hanoi tower

    2022年3月7日
    34
  • 最新版本kali安装教程(VMware版本)

    最新版本kali安装教程(VMware版本)一、Kali是什么?KaliLinux是基于Debian的Linux发行版,设计用于数字取证操作系统。每一季度更新一次。由OffensiveSecurityLtd维护和资助。最先由OffensiveSecurity的MatiAharoni和DevonKearns通过重写BackTrack来完成,BackTrack是他们之前写的用于取证的Linux发行版。二、下载kali系统文件温馨提示:在阅读本教程前,请确保你本机已经安装好VMwareWorkstat…

    2022年6月6日
    23

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号