• Appium_Xpath定位详解


    做的笔记比较乱,定位过程中,发现很多开发小哥的代码命名问题,怕被怼,这里说说算了。

    恩。。这是我最常用,也是最熟悉的定位方法之一,这次趁着UI交换变更的机会,整理一下Xpath的定位方法,喜欢可以收藏!

    1、根据元素的属性 textresource-id class content-desc属性定位 

    # text定位   1.可以通过text文本定位到
    # driver.find_element_by_xpath("//*[@text='天猫国际']")
    
    # resource-id定位   2.如果元素id是唯一的,xpath也可以定位id属性
    # 扫一扫
    driver.find_element_by_xpath("//*[@resource-id='com.taobao.taobao:id/bar_search']")
    time.sleep(4)
    driver.back()
    
    # class定位    3.class属性唯一的话,可以通过class属性定位到,定位class属性有两种方法
    driver.find_element_by_xpath("//android.widget.EditText").click()
    time.sleep(4)
    driver.back()
    driver.find_element_by_xpath("//*[@class='android.widget.EditText']").click()
    
    # text定位
    time.sleep(5)
    driver.back()
    driver.find_element_by_xpath("//*[@text='注册/登录']").click()
    time.sleep(5)
    # content-desc     4.定位content-des属性
    driver.find_element_by_xpath("//*[@content-desc='帮助']").click()

    2、contains模糊定位

    .contains是模糊匹配的定位方法,对于一个元素的id或者text不是固定的,但有一部分是固定的,这种就可以模糊匹配

    contains定位在定位一组元素的时候,效率尤其突出

    # 模糊匹配
    driver.find_element_by_xpath("//*[contains(@resource-id, 'bar_search')]").click()
    time.sleep(5)
    driver.back()
    # widget.EditText 搜索
    driver.find_element_by_xpath("//*[contains(@class, 'widget.TextView')]").click()
    time.sleep(5)
    driver.back()
    # text 的 contains
    driver.find_element_by_xpath("//*[contains(@text, '注册/登录')]").click()
    time.sleep(5)
    driver.find_element_by_xpath("//*[contains(@text, '帮助')]").click()

    3、匹配多个定位元素

    # 匹配多个
    duoge = driver.find_elements_by_xpath("//android.widget.TextView")   # 返回是个list
    print("获取元素个数: %s" % len(duoge))
    for i in duoge:
        print(i.text)

    4、组合定位

    如果一个元素有2个属性,通过xpath也可以同时匹配2个属性,text, resource-id,class,index,content-desc这些属性都能任意组合定位

    # 通过2个属性组合定位
    # id+class  淘宝搜索框
    driver.find_element_by_xpath("//android.widget.EditText[@resource-id='com.taobao.taobao:id/home_searchedit']")
    
    # text+class  淘宝全部分类
    driver.find_element_by_xpath("//*[@text='分类' and @class='android.widget.TextView']")
    
    # id+desc  淘宝扫一扫
    driver.find_element_by_xpath("//*[@resource-id='com.taobao.taobao:id/home_searchedit' and @content-desc='扫一扫']")

    5、or 或者 and

    # or 或者 and
    x = "//*[@text='' or @class='']"
    els = driver.find_elements_by_xpath(x)  # 一般定位一组元素用到
    for i in els:
        print(i.els)

    6、级定位-父子定位

    知道父亲元素,也可以定位到子元素

    # 父亲定位儿子   搜索框输入
    # 有多个相同标签儿子,可以通过下标取值(xpath语法是从1开始数)
    driver.find_element_by_xpath('//android.webkit.WebView[@content-desc="安全验证"]/android.view.View[4]')

    有多个相同标签儿子,可以通过下标取值(xpath语法是从1开始数)

    7、儿子定位父亲

    # 儿子定位父亲
    sun_fa1 = '//*[@resource-id="com.taobao.taobao:id/tv_scan_text"]/..'
    c = driver.find_element_by_xpath(sun_fa1).tag_name
    print(c)
    
    # 方法二  parent::*
    sun_fa2 = '//*[@resource-id="com.taobao.taobao:id/tv_scan_text"]/parent::*'
    d = driver.find_element_by_xpath(sun_fa1).tag_name
    print(d)
    
    # 方法三 parent::android.widget.LinearLayout
    sun_fa3 = '//*[@resource-id="com.taobao.taobao:id/tv_scan_text"]/parent::android.widget.LinearLayout'
    e = driver.find_element_by_xpath(sun_fa1).tag_name
    print(e)
    8、爷爷定位孙子

    通过层级关系,一层一层的往下找,可以通过爷爷元素,定位到孙子元素

    # 爷爷定位孙子
    # 爷爷元素FrameLayout---第一个FrameLayout儿子---孙子TextView
    x = '//android.widget.FrameLayout/android.widget.LinearLayout[1]/android.widget.TextView'
    t = driver.find_elements_by_xpath(x)
    print(len(t))
    # 打印文本信息
    print(t[0].text)

    作者:含笑半步颠√

    博客链接:https://www.cnblogs.com/lixy-88428977

    声明:本文为博主学习感悟总结,水平有限,如果不当,欢迎指正。如果您认为还不错,欢迎转载。转载与引用请注明作者及出处。

  • 相关阅读:
    从Oracle提供两种cube产品说开
    Sql Server DWBI的几个学习资料
    Unload Oracle data into text file
    初学Java的几个tips
    我常用的Oracle知识点汇总
    benefits by using svn
    如何在windows上使用putty来显示远端linux的桌面
    building commercial website using Microsoft tech stack
    Understand Thread and Lock
    Update google calendar by sunbird
  • 原文地址:https://www.cnblogs.com/lixy-88428977/p/9561811.html
Copyright © 2020-2023  润新知