XP定位(APP元素定位)

Appium app自动化测试经验分享-Xpath定位总结

在我看来,自动化测试中元素定位的倚天剑和屠龙刀莫过于 Xpath和CSS,但CSS只用于Web(之前已经分享过),这次就分享下Xpath的定位方法。本期讲的是Xpath定位运用到App。

一)Xpath定位

XPath即为XML Path 的简称,它是一种用来确定XML文档中某部分位置的语言。

XML:一种标记语言,用于数据的存储和传递。 后缀.xml结尾

提示:Xpath为强大的语言,那是因为它有非常灵活定位策略;

二)Xpath定位实战

以下所有用例所用app是夜神模拟器,实际操作:点击设置-点击更多。

1.根据 元素属性名和属性值 来定位

依据:元素属性名和值
格式:(假设都可以唯一定位某元素)
//*[@resource-id=“XXXX”]
//*
[@text=“XXXX”]
//*[@content-desc=“XXXX”]


        """xpath 根据元素属性名和属性值来定位"""
        self.xin_find_element(By.XPATH, ‘//*[@text="通讯录"]‘).click()     # text属性值是通讯录 可以唯一定位
        self.xin_find_element(By.XPATH, ‘//*[@resource-id="com.tencent.mm:id/ik"]‘).click()     # resource-id属性值是com.tencent.mm:id/ik 不唯一,但是此元素处于第一个
ele= driver.find_element_by_xpath(‘//*[@content-desc="搜索"]‘)# a1=driver.find_element_by_xpath("//*[@text=‘更多‘]")# a2=driver.find_element_by_xpath("//*[@resource-id = ‘com.android.settings:id/title‘]")#点击ele.click()

2.根据 标签 + 元素属性名和值 组合定位

依据:class + 元素属性名和值
格式:(假设都可以唯一定位某元素)
//class[@resource-id=“XXXX”]
//class[@text=“XXXX”]
//class[@content-desc=“XXXX”]

    def test_xpath_03b(self):
        """ 标签 + 元素属性名和值"""
        self.xpath_find_element(‘//android.widget.TextView[@text="通讯录"]‘).click()
        self.xpath_find_element(‘//android.view.View[@text="微信团队"]‘).click()
  • 1
  • 2
  • 3
  • 4
    def test_xpath_03c(self):
        """ 标签 + 元素属性名和值"""
        self.xpath_find_element(‘//android.widget.TextView[@text="通讯录"]‘).click()
        self.xpath_find_element(‘//android.view.View[@content-desc="微信团队"]‘).click()
  • 1
  • 2
  • 3
  • 4

如果同样的属性值定位多个元素elements,可以加上索引来定位: driver.find_element_by_xpath(’(//android.view.View[@content-desc=“详情”])[1]’).click()

3.根据 层级关系+索引 来定位

层级关系 主要是 父定位子,爷爷定位孙子
格式://*[@attribute=‘XXXX’]/class

索引:同类class排序,从1开始

    def test_xpath_04(self):
        """层级关系、索引"""
        self.xpath_find_element(‘//android.widget.LinearLayout/android.widget.RelativeLayout[2]/android.widget.LinearLayout[@resource-id="com.tencent.mm:id/bwj"]/android.widget.TextView‘).click()
        self.xpath_find_element(‘//android.widget.RelativeLayout[@resource-id="com.tencent.mm:id/ih"]/android.view.View‘).click()     # 父类的id定位并非唯一,但是父类位于第一个
  • 1
  • 2
  • 3
  • 4
    def test_xpath_04b(self):
        """层级关系、索引"""
        self.xpath_find_element(‘//android.widget.LinearLayout/android.widget.RelativeLayout[2]‘).click()
        self.xpath_find_element(‘//android.widget.ListView[@resource-id="com.tencent.mm:id/i2"]/android.widget.LinearLayout[2]/android.widget.LinearLayout‘).click()
  • 1
  • 2
  • 3
  • 4
    def test_xpath_04c(self):
        """层级关系、索引"""
        self.xpath_find_element(‘//android.widget.LinearLayout[@resource-id="com.tencent.mm:id/bwj"]/android.widget.TextView[@text="通讯录"]‘).click()
        self.xpath_find_element(‘//android.widget.LinearLayout/android.widget.RelativeLayout/android.view.View[@text="微信团队"]‘).click()
  • 1
  • 2
  • 3
  • 4

4.根据 兄弟节点 来定位

兄弟节点 主要在子定位父

格式:
// *[ @ resource - id = “resource-id属性值”] /…/ class1
// *[ @ resource - id = “resource-id属性值”] / parent::class/class1
可以无限 子定位父

    def test_xpath_05(self):
        """兄弟节点"""
        self.xpath_find_element(‘//android.widget.RelativeLayout/../android.widget.TextView[@text="通讯录"]‘).click()
        self.xpath_find_element(‘//android.widget.TextView[@text="W"]/parent::*/android.widget.LinearLayout‘).click()
  • 1
  • 2
  • 3
  • 4
    def test_xpath_05b(self):
        """兄弟节点"""
        self.xpath_find_element(‘//com.tencent.mm.ui.mogic.WxViewPager[@resource-id="com.tencent.mm:id/auh"]/parent::android.widget.LinearLayout/android.widget.RelativeLayout/android.widget.LinearLayout/android.widget.RelativeLayout[2]‘).click()
        self.xpath_find_element(‘//android.view.View[@resource-id="com.tencent.mm:id/i5"]/parent::android.widget.RelativeLayout/parent::android.widget.FrameLayout/android.widget.ListView/android.widget.LinearLayout[2]/android.widget.LinearLayout‘).click()
  • 1
  • 2
  • 3
  • 4

5. 根据 逻辑运算 and or not 组合定位

格式: //*[@attribute1=‘XXXX’ and @attribute2=‘XXXXXX’]

    def test_xpath_06(self):
        """逻辑运算 and or not """
        self.xpath_find_element(‘//*[@text="通讯录" and @class="android.widget.TextView"]‘).click()
        self.xpath_find_element(‘//*[@text="微信团队" and @resource-id="com.tencent.mm:id/ik"]‘).click()
  • 1
  • 2
  • 3
  • 4
    def test_xpath_06b(self):
        """逻辑运算 and or not """
        self.xpath_find_element(‘//*[@text="通讯录" and @resource-id="com.tencent.mm:id/bwm"]‘).click()    # and 用于多个元素可以唯一定位的时候
        self.xpath_find_element(‘//*[@text="微信团队" or @content-desc="微信团队"]‘).click()    # or 用于多个元素都可以唯一定位 的时候
  • 1
  • 2
  • 3
  • 4

6.根据 模糊定位contains、starts-with

格式:
//*[contains(@attribute,‘XXXX’)]

//*[starts-with(@attribute,“XXXX”)]

    def test_xpath_07(self):
        """模糊匹配 contains"""
        self.xpath_find_element(‘//*[contains(@text,"讯")]‘).click()
        self.xpath_find_element(‘//*[contains(@text,"团队")]‘).click()
  • 1
  • 2
  • 3
  • 4
    def test_xpath_07b(self):
        """模糊匹配 contains"""
        self.xpath_find_element(‘//*[contains(@text,"录")]‘).click()
        self.xpath_find_element(‘//*[contains(@content-desc,"微信")]‘).click()
  • 1
  • 2
  • 3
  • 4
    def test_xpath_07c(self):
        """模糊匹配 contains"""
        self.xpath_find_element(‘//*[contains(@text,"通讯")]‘).click()
        self.xpath_find_element(‘//*[contains(@content-desc,"信团")]‘).click()
  • 1
  • 2
  • 3
  • 4
    def test_xpath_08(self):
        """模糊匹配 starts-with"""
        self.xpath_find_element(‘//*[starts-with(@text,"通讯")]‘).click()
        self.xpath_find_element(‘//*[starts-with(@text,"微信")]‘).click()
  • 1
  • 2
  • 3
  • 4
    def test_xpath_08b(self):
        """模糊匹配 starts-with"""
        self.xpath_find_element(‘//*[starts-with(@text,"通讯")]‘).click()
        self.xpath_find_element(‘//*[starts-with(@content-desc,"微信")]‘).click()
  • 1
  • 2
  • 3
  • 4

这些都是自己整理、全部测试通过得,写这些xpath一般不太费力气;就是层级关系那儿真的是辛苦,来回绕来绕去得很麻烦。明天分享Xpath定位运用到Web。

原文地址:https://www.cnblogs.com/zenghongfei/p/11743971.html

时间: 2024-11-06 07:21:06

XP定位(APP元素定位)的相关文章

移动端测试——APP元素定位操作 (3)

一.appium基础API讲解 1.1 APP元素定位操作 建议: 使用显示等待 能用id.class定位就不用xpath定位 只要看的见的,用xpath的text就是万能的 手工测试主要通过可见按钮操作,而自动化是通过元素进行交互操作 元素的基本定位基于当前屏幕范围内展示的可见元素 前置代码 # 导入driver对象 from appium import webdriver import time # server 启动参数 desired_caps = {} # 设备信息(系统.版本.设备号

APP元素定位工具之——Weditor

1.weditor的说明 WEditor可以理解为在浏览器中打开的uiautomatorviewer,个人使用起来比uiautomatorviewer更好用,不会像uiautomatorviewer那样由于安卓系统的不同,会出现各种情况,还支持安卓.ios.Neco(beta): 如果在使用uiautomatorviewer遇到问题时,可以采用WEditor试试(个人更偏向使用weditor). 2.weditor的安装 GitHub地址:https://github.com/openatx/w

Appium定位App元素以及录制简单脚本

本次使用Appium自带的Inspector定位工具定位元素, 以及进行最最最简单脚本的录制: 等待一会儿,进入微信启动页: 点击刷新,进入微信首页: 此时,可以分别定位"通讯录"."发现"和"我"等元素: 下面开始进行录制简单的脚本, 模拟进入微信相册的第一条分享: 请注意这时候不要去管手机, 所有的操作都是在Appium上完成的: 这个脚本真是太太太简单了, 没有任何参考价值: 原文地址:https://www.cnblogs.com/yjl

使用uiautomatorviewer定位App元素

这个工具是Android SDK自带的, 在C:\Android\sdk\tools\bin目录下: 双击之, 首次启动会报错: Unable to connect to adb. Check if adb is installed correctly. 怎么解决呢? 关闭之, 打开uiautomatorviewer.bat文件, 修改最后一行: %prog_dir% 改为: C:\Android\sdk\platform-tools 再次打开uiautomatorviewer: 原文地址:ht

第三章:WebDriver定位—— 单个元素定位(id , name ,class , LinkText )

1. 打开百度页面进入开发者模式中,查看页面源代码. 2. 通过 代码来 练习各个定位元素.

Appium中app的元素定位

app定位方式,本文只讲Android手机的定位方式. 前提条件是adb连接到模拟器或者是手机(具体连接方式这里不再讲解),证明已连接到设备 adb devices app元素定位工具一:UI Automator Viewer 这个工具是Android SDK自带的一个定位工具,具体页面截图如下: app元素定位工具二:Appium工具 启动Appium,启动之后,页面有一个放大镜的按钮,如图所示: 点击放大镜按钮,进入配置项,如果所示: platformName  -- 系统名称 platfo

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

前言 环境搭建好了,下一步元素定位,元素定位本篇主要介绍如何使用uiautomatorviewer,通过定位到页面上的元素,然后进行相应的点击等操作. uiautomatorviewer是android-sdk自带的一个元素定位工具,非常简单好用,使用uiautomatorviewer,你可以检查一个应用的UI来查看应用的布局和组件以及相关的属性. 一.启动uiautomatorviewer.bat 1.打开目录D:\androidsdk\android-sdk-windows\tools 14

Selenium2+python自动化6-八种元素元素定位(Firebug和firepath)

前言 自动化只要掌握四步操作:获取元素,操作元素,获取返回结果,断言(返回结果与期望结果是否一致),最后自动出测试报告.本篇主要讲如何用firefox辅助工具进行元素定位. 元素定位在这四个环节中是至关重要的,如果说按学习精力分配的话,元素定位占70%:操作元素10%,获取返回结果10%:断言10%.如果一个页面上的元素不能被定位到,那后面的操作就无法继续了.接下来就来讲webdriver提供的八种基本元素定位方法. 一.环境准备: 1.浏览器选择:Firefox 2.安装插件:Firebug和

Selenium2+python自动化02-八种元素定位(Firebug和Firepath)

前言    自动化只要掌握四步操作:获取元素,操作元素,获取返回结果,断言(返回结果与期望结果是否一致),最后自动出测试报告.本篇主要讲如何用firefox辅助工具进行元素定位.元素定位在这四个环节中是至关重要的,如果说按学习精力分配的话,元素定位占70%:操作元素10%,获取返回结果10%:断言10%.如果一个页面上的元素不能被定位到,那后面的操作就无法继续了.接下来就来讲webdriver提供的八种基本元素定位方法. 一.环境准备: 1.浏览器选择:Firefox 2.安装插件:Firebu