zoukankan      html  css  js  c++  java
  • 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

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

  • 相关阅读:
    matlab read txt
    matlab读取数据并操作
    NFS 共享信息泄露漏洞
    centos6.8环境下安装elasticdump进行elasticsearch索引结构mapping的备份
    Linux命令行下如何终止当前程序
    ubuntu 使用sudo vim /etc/apt/sources.list命令修改文件后该如何退出?
    隐写工具zsteg安装及使用教程
    【转】今天做CTF隐写术的题偶然发现一隐写图片查看的神器------stegsolve,分享给大家
    java安装及配置环境变量
    deepin使用root身份运行
  • 原文地址:https://www.cnblogs.com/lixy-88428977/p/9561811.html
Copyright © 2011-2022 走看看