Xpath定位方法

Xpath定位方法

1.根据路径定位
#绝对路径:以/开头从html开始一级一级往下写
driver.find_element_by_xpath('路径')  #选中元素->右击->copy full xpath
#相对路径:以//开头  路径[第几个符合条件的元素]
2.利用元素属性定位
//标签名[@属性名=属性值] 
标签名为* 匹配所有标签名
3.属性与逻辑结合定位
  #结合多个属性定位
//标签名[@属性名1=属性值1  and @属性名2=属性值2...] 
#如果遇到class,值算一个整体,class属性值多个时不能只写一个属性值
4.层级与属性相结合
#通过其他元素进行定位
//路径.../标签名[@属性名=属性值]
5.向上查找
#..  查找上一级
#ancestor 向上查找,所有父辈,可以结合属性查找
ancestor::标签名
--------------------------------------------------------------
例如:
ancestor::div[@role="dialog"]
6.通过文本查找
//标签名[text()=文本值]
----------------------------------------------------------------
例:
//a[text()="网站"]
7.节点信息(属性值或文本值)模糊查找
//标签名[contains(@属性名,属性值)]
//a[contains(@id,"AA")]
8.查找以XX开头的元素

适用于某属性开头固定,后面元素变化

//标签名[starts-with(@属性名,属性值)]          #字符串要双引号

查找范围

通过层级关系查找,分2种,/ 或者 //分隔
路径中间以/分隔代表直接在子元素中查找
路径中间以//分隔代表在所有的后代元素中查找

查找特定元素
  1. 查找最后一个元素

    标签名[last()]
    
  2. 定位的元素,文本中包含空格

    //标签名[normalize-space(.)='去除空白后的文本']   #.表示当前节点,可能定位不到,推荐第二种写法//标签名[normalize-space(text())='去除空白后的文本']      
    

Xpath总结

部分 描述 是否必须 格式
第一部分 开头部分 必须 /或//
第二部分 标签部分 必须 *或指定标签
第三部分 节点信息部分 非必须 如果有的话用[]括起来,可以是属性或者文本,多个用and连接
第四部分 层级部分 非必须 层级之间用/或//分隔

Xpath轴定位

  1. 子节点轴(child::):选择指定节点的所有直接子节点。
//div/child::p   #选择所有div节点的直接子节点中的p节点
  1. 父节点轴(parent::):选择指定节点的父节点。
//p/parent::div    #选择所有p节点的父节点中的div节点
  1. 兄弟节点轴(following-sibling::、preceding-sibling::):选择指定节点之后或之前的所有同级节点。
//div/following-sibling::p   #选择div节点之后的所有同级p节点
//p/preceding-sibling::span  #选择p节点之前的所有同级span节点
  1. 祖先节点轴(ancestor::):选择指定节点的所有祖先节点。
//p/ancestor::div   #选择所有p节点的祖先中的div节点
  1. 后代节点轴(descendant::):选择指定节点的所有后代节点。
//div/descendant::p   #选择所有div节点的后代中的p节点
  1. 属性节点轴(attribute::):选择指定节点的属性节点。
//@class    #选择所有节点的class属性
  1. 自身节点轴(self::):
//div/self::div   #选择div节点本身。
  1. 同级节点轴(following::、preceding::):
//div/following::p     #选择div节点之后的同级p节点
//p/preceding::span    #选择p节点之前的同级span节点
  1. 命名空间节点轴(namespace::):
//namespace::*      #选择文档中所有命名空间节点
  1. 前一个文档节点轴(preceding::):
//div/preceding::node()   #选择div节点之前的所有节点。
  1. 后一个文档节点轴(following::):
//div/following::node()  #选择div节点之后的所有节点。
  1. 默认命名空间轴(default namespace::):
//default namespace::*   #选择文档的默认命名空间。

你可能感兴趣的:(xpath,selenium,测试工具)