XP定位(APP元素定位)

XP定位(APP元素定位),第1张

概述Appiumapp自动化测试经验分享-Xpath定位总结 在我看来,自动化测试中元素定位的倚天剑和屠龙刀莫过于Xpath和CSS,但CSS只用于Web(之前已经分享过),这次就分享下Xpath的定位方法。本期讲的是Xpath定位运用到App。一)Xpath定位XPath即为XMLPath的简称,它是一种用来确定XML文档 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()
1234
    def test_xpath_03c(self):        """ 标签 + 元素属性名和值"""        self.xpath_find_element('//androID.Widget.TextVIEw[@text="通讯录"]').click()        self.xpath_find_element('//androID.vIEw.VIEw[@content-desc="微信团队"]').click()
1234

如果同样的属性值定位多个元素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定位并非唯一,但是父类位于第一个
1234
    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()
1234
    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()
12344.根据 兄弟节点 来定位

兄弟节点 主要在子定位父

格式:
// *[ @ 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()
1234
    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()
12345. 根据 逻辑运算 and or not 组合定位

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

    def test_xpath_06(self):        """逻辑运算 and or not """        self.xpath_find_element('//*[@text="通讯录" and @]').click()        self.xpath_find_element('//*[@text="微信团队" and @resource-ID="com.tencent.mm:ID/ik"]').click()
1234
    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 用于多个元素都可以唯一定位 的时候
12346.根据 模糊定位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()
1234
    def test_xpath_07b(self):        """模糊匹配 contains"""        self.xpath_find_element('//*[contains(@text,"录")]').click()        self.xpath_find_element('//*[contains(@content-desc,"微信")]').click()
1234
    def test_xpath_07c(self):        """模糊匹配 contains"""        self.xpath_find_element('//*[contains(@text,"通讯")]').click()        self.xpath_find_element('//*[contains(@content-desc,"信团")]').click()
1234
    def test_xpath_08(self):        """模糊匹配 starts-with"""        self.xpath_find_element('//*[starts-with(@text,"通讯")]').click()        self.xpath_find_element('//*[starts-with(@text,"微信")]').click()
1234
    def test_xpath_08b(self):        """模糊匹配 starts-with"""        self.xpath_find_element('//*[starts-with(@text,"通讯")]').click()        self.xpath_find_element('//*[starts-with(@content-desc,"微信")]').click()
1234

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

 

总结

以上是内存溢出为你收集整理的XP定位(APP元素定位)全部内容,希望文章能够帮你解决XP定位(APP元素定位)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1090932.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存