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)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • STM32驱动ST7701S芯片(vⅰV0手机换屏价)

    1、配置GPIO口voidLCD_GPIO_Config(void){/*定义一个GPIO_InitTypeDef类型的结构体*/GPIO_InitTypeDefGPIO_InitStructure;/*????IO??*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE…

    2022年4月11日
  • idea常用快捷键大全_idea的快捷键设置

    idea常用快捷键大全_idea的快捷键设置文章目录一.快速生成main二.快速生成System.out.print三.文件保存四.删除一行五.新添,新建,添加的快捷键六.切换java程序七.目录显示与关闭八.运行九.提示方法的参数十.切换窗口一.快速生成main输入psvm二.快速生成System.out.print使用sout三.文件保存IDEA是自动保存的,不需要我们去Ctrl+S保存。四.删除一行Ctrl+Y五.新添,新建,添加的快捷键Alt+lnsert六.切换java程序

    2022年9月6日
  • java视频教程免费下载

    java视频教程免费下载Java视频教程孙鑫Java无难事(全12CD)Java视频教程即学即会java上海交大Java初级编程基础共25讲下载avi格式吉林大学Java程序设计视频教程48讲+2讲辅导csf格式尚学堂Java视频教程J2SE5.0马士兵主讲高清avi格式张孝祥Java课堂系列之Tomcat入门(七讲swf)张孝祥Java课堂系列

    2022年5月13日
  • Pycharm Debug调试python程序

    Pycharm Debug调试python程序pycharm的Debug调试是非常方便简单的,具体步骤如下:Debug步骤首先运行一下程序,使得调试的程序是你运行的程序。添加断点:直接在标记处点击鼠标左键即可。(删除断点只需再点击断点处即可)Debug下运行代码:如图所示(shift+F9)按照所需调试进行代码调试。Debug的调试方式如下所示:分别为:1.showexecutionpoint…

    2022年10月28日
  • SSRF漏洞之FastCGI利用篇「建议收藏」

    SSRF漏洞之FastCGI利用篇「建议收藏」SSRF漏洞之FastCGI利用篇SSRF–(Server-sideRequestForge,服务端请求伪造)定义:由攻击者构造的攻击链接传给服务端执行造成的漏洞,一般用来在外网探测或攻击内网服务SSRF漏洞思维导图如下,本篇主要介绍利用SSRF漏洞攻击FastCGI0x00.PHP-FPMFastCGI未授权利用首先我们使用Vulhub漏洞靶场快速搭建漏洞环境进行复现,感受一波漏洞的危害#保证实验vps具有git、docker、pip、docker-compose、python基

    2022年7月15日
  • Codeforces 474 F. Ant colony

    Codeforces 474 F. Ant colony

    2022年1月22日

发表回复

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

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