首页 > 其他分享 >史上最全的xpath 、CSS定位方法

史上最全的xpath 、CSS定位方法

时间:2024-07-23 21:31:06浏览次数:7  
标签:xpath 定位 标签 最全 元素 css 节点 CSS 属性

史上最全的xpath 、CSS定位方法 

 

 

Xpath常用的定位方法

相信做过selenium UI自动化的朋友都知道,工作中大部分的元素定位都是使用xpath进行定位,所以xpath是UI自动化工作中非常重要的一个环节,所以我单独整理出来一篇博客出来~~希望对大家有帮助~

相对定位

相对定位是两个杠表示“//”,相对路径易维护
在这里插入图片描述
绝对路径

绝对定位用一个杠“/”, 绝对路径一个层级变化所有空间都有变化

在这里插入图片描述

/html/body/div[1]/section/section/main/div[2]/div[2]/div[1]/div[2]/button[1]/span

last()方法
当标签存在多个相同的时候,可以使用xpath中的last()方法,定位到最后一个
在这里插入图片描述

//标签名[last()]
//span/ul//li[last()]

如果我们要定位到倒数第二个,可以在last() 后面加上 -1,代表倒数第二个
在这里插入图片描述

//标签名[last()-1]
//span/ul//li[last()-1]

属性查找@

如,这里我们以百度为例,如果我们要定位到百度的id元素,那么可以使用 //标签名[@元素名称=‘元素值’]
在这里插入图片描述

 //标签名[@元素名称='元素值']
//input[@id='kw']

xpath逻辑表达式-and

当一个元素无法定位到唯一值得时候,我们可以使用and表达式,同一个标签下定位多个元素
在这里插入图片描述


//标签名[@元素名称='元素值' and @元素名称='元素值']
//input[@id='kw' and @class='s_ipt']

xpath表达式-or

xpath 中 or的表达式和and很像,指的是当你元素满足其中一个条件的时候,就可以定位到,如图,在百度搜索框中,我们故意将@class='s_t’元素写错,内容中并没有这个元素,

在这里插入图片描述

// 标签名[@元素名称='元素值' or @元素名称='元素值']
//input[@id='kw' or @class='s_t']

非查找控件

如图,如果我们想要查找元素值不等于某个值的内容,可以使用!=方法,但是这个方法在工作中用的比较少,目前我还没有用到过,不过xapth提供了这个方法,可以结合场景使用~
在这里插入图片描述

//标签名称[@元素名称 != '元素值']
//input[@class!='1111']

Not查找

//标签名[not(.='元素值')
//year[not(.=2005)]
//div[not(@id="tab-AndroidVersions")]

这里没有找到合适的场景,意思就是查找year内容不为2005的内容 注:“.”就等于text()

模糊匹配

在这里插入图片描述

//标签名[contains(text(), "内容"]
//div[contains(text(), "更新")]

这里的意思是模糊查询内容包含“更新”的元素

精准匹配

在这里插入图片描述

//标签名[(text()='内容')]
//div[(text()='更新文案')]

使用大于小于符号定位

在这里插入图片描述

//div[@class="cell" and text()>'1336']
//div[@class="cell" and text()<'1336']

如图,当我们商品列表中有多个商品ID,那我们想要定位到ID大于或者小于1336的数据,可以通过上面的方式。

轴方式定位

轴表达式说明

parent::* :表示当前节点的父节点元素

ancestor::* :表示当前节点的祖先节点元素

child::* :表示当前节点的子元素 /A/descendant::* 表示A的所有后代元素

self::* :表示当前节点的自身元素

ancestor-or-self::* :表示当前节点的及它的祖先节点元素

descendant-or-self::* :表示当前节点的及它们的后代元素

following-sibling::* :表示当前节点的后序所有兄弟节点元素

preceding-sibling::* :表示当前节点的前面所有兄弟节点元素

following::* :表示当前节点的后序所有元素

preceding::* :表示当前节点的所有元素
  1. parent:: 当前节点的父节点元素*

在这里插入图片描述

//div[@class="cell" and text()='1338']/parent::*

如图,我们要定位到ID为1338元素的父节点元素,可以使用如上xpath轴定位, “*” 表示匹配所有

  1. following-sibling::
/bookstore/book[1]/following-sibling::*

查找books1所有的同级元素都查找出来,“*”表示所有

在这里插入图片描述

//div[3]/table/tbody/tr[1]/td[1]/following-sibling::td[2]

查找td[1]下同级节点下的第二个节点
在这里插入图片描述
3. following-sibling::当前节点的前面所有兄弟节点元素

/bookstore/book[2]/year/preceding-sibling::*

意思是:查找books[2]下year前的同级节点

在这里插入图片描述

  1. 查找节点的父辈
/bookstore/book[2]/year/parent::*
  1. 查找节点的子辈
/bookstore/book[2]/descendant::*

使用position位置定位

意思是定位到th标签下的第一个

//th[@class="c-id " and position()=1]

在这里插入图片描述
也可以//th[@class="c-id " and position()<2] 这样用~

 

原文链接:https://blog.csdn.net/weixin_43865008/article/details/115332404

 

1、css属性定位

css选择器策略示例说明
#id #telA 选择id="telA"的所有元素。
.class .telA 选择 class="telA”的所有元素。
[属性名=属性值] [name=telA] 除了id和class属性,其他属性的定位格式
[attribute] [target] 选择带有target 属性所有元素。
* * 选择所有元素。

2、css属性值模糊匹配定位

css选择器策略示例说明
[attribute^=value] a[src^="https"] 选择其src 属性值以"https”开头的每个<a>元素。
[attribute$=value] a[src$=".pdf"] 选择其src属性以".pdf“结尾的所有<a>元素。
[attribute*=value] a[src*="abc"] 选择其src 属性中包含“abc"子串的每个<a>元素。
[attribute~=value] a[title~=flower] 定位标签属性title值中有独立flower词汇的节点
[attribute =value] a[lang =en] 用于选取带有以指定值开头的属性值的元素。

注意:[attribute|=value]
该值必须是整个单词,比如 lang="en",或者后面跟着连字符,比如 lang="en-us"。

3、css标签定位

css选择器策略示例说明
element p 定位所有<p>元素。
标签名[属性名=属性值] input#telA 定位id属性值为telA的所有<input>元素

4、css层级关系定位

css选择器策略示例说明
element,element div,p 选择所有 <div> 元素和所有 <p> 元素。
element element div p 选择 <div> 元素内部的所有 <p> 元素。包括子孙后代。
element>element div>p 选择父元素为 <div> 元素的所有 <p> 元素。只包括子代。
element+element div+p 选择紧接在 <div> 元素之后的所有 <p> 元素。同辈元素。

示例:

css选择器策略示例说明
需要使用 > 或 空格表示层级关系   语法
父标签名[父标签属性名=属性值]>子标签名 p#p1>input 定位id属性值为p1的<input>元素
父标签名[父标签属性名=属性值] 子标签名 p#p1 input 同上

5、css索引定位

css选择器策略示例说明
:only-child p:only-child 选择属于其父元素的唯一子元素的每个 <p> 元素。
:nth-child(n) p:nth-child(2) 选择属于其父元素的第二个子元素的每个 <p> 元素。
:nth-last-child(n) p:nth-last-child(2) 同上,从最后一个子元素开始计数。
:nth-of-type(n) p:nth-of-type(2) 选择属于其父元素第二个 <p> 元素的每个 <p> 元素。
:nth-last-of-type(n) p:nth-last-of-type(2) 同上,但是从最后一个子元素开始计数。

6、css逻辑运算定位

css选择器策略逻辑定位 
示例 标签名[属性名1=属性值1][属性名2=属性值2]  
示例 input[type='telA'][placeholder='电话A']  
说明 同时匹配多个属性  

7、css元素状态定位

选择器例子例子描述
:empty p:empty 选择没有子元素的每个 <p> 元素(包括文本节点)。
:target #news:target 选择当前活动的 #news 元素。
:enabled input:enabled 选择每个启用的 <input> 元素。
:disabled input:disabled 选择每个禁用的 <input> 元素
:checked input:checked 选择每个被选中的 <input> 元素。
:not(selector) :not(p) 选择非 <p> 元素的每个元素。

七 、总结

  • 如果元素有明确idnameclass属性时,使用对应的基本定位方法。
  • 如果没有idnameclass属性时,或idnameclass属性是动态/不唯一的时候,使用XPathcss_selector定位。
  • 定位页面超链接使用link_textpartial_link_text定位
  • 可使用XPathcss_selector定位的时候,优先使用css_selector
    css_selector定位的速度和效率比Xpath高。
  • 没有最好的,只有最精简的,怎么简单怎么来。

扩展:为什么css_selector定位的速度和效率比Xpath高?
因为你无论用那种方式定位,最终都会转换到css_selector进行元素定位。
我们可以在PyCharm中,安装ctrl点击对应的方法,进行查看源码,最终都会定位到如下代码:

    def find_element(self, by=By.ID, value=None):
        """
        Find an element given a By strategy and locator. Prefer the find_element_by_* methods when
        possible.

        :Usage:
            element = driver.find_element(By.ID, 'foo')

        :rtype: WebElement
        """
        if self.w3c:
            if by == By.ID:
                by = By.CSS_SELECTOR
                value = '[id="%s"]' % value
            elif by == By.TAG_NAME:
                by = By.CSS_SELECTOR
            elif by == By.CLASS_NAME:
                by = By.CSS_SELECTOR
                value = ".%s" % value
            elif by == By.NAME:
                by = By.CSS_SELECTOR
                value = '[name="%s"]' % value
        return self.execute(Command.FIND_ELEMENT, {
            'using': by,
            'value': value})['value']

最好我这里给你们分享一下我所积累和真理的文档和学习资料有需要是领取就可以了

 来自:https://zhuanlan.zhihu.com/p/571510714

标签:xpath,定位,标签,最全,元素,css,节点,CSS,属性
From: https://www.cnblogs.com/lhxsoft/p/18319664

相关文章

  • CSS 容器查询 CSS Container Queries
    CSS容器查询的主要思想是将一个元素注册为“容器”,并在容器元素满足某些条件时将样式应用于其他元素。 容器查询通常被认为是响应式网页设计的一种现代方法,其中传统媒体查询长期以来一直是黄金标准-原因是我们可以创建由响应容器宽度而不是视口宽度的元素组成的布局。.par......
  • 2024网络安全学习路线,最全保姆级教程,学完直接拿捏!
    关键词: 网络安全入门、渗透测试学习、零基础学安全、网络安全学习路线首先咱们聊聊,学习网络安全方向通常会有哪些问题前排提示:文末有CSDN独家网络安全资料包!1、打基础时间太长学基础花费很长时间,光语言都有几门,有些人会倒在学习linux系统及命令的路上,更多的人会倒在学......
  • 2024网络安全学习路线,最全保姆级教程,学完直接拿捏!
    关键词: 网络安全入门、渗透测试学习、零基础学安全、网络安全学习路线首先咱们聊聊,学习网络安全方向通常会有哪些问题前排提示:文末有CSDN独家网络安全资料包!1、打基础时间太长学基础花费很长时间,光语言都有几门,有些人会倒在学习linux系统及命令的路上,更多的人会倒在学......
  • 2024网络安全学习路线,最全保姆级教程,学完直接拿捏!
    关键词: 网络安全入门、渗透测试学习、零基础学安全、网络安全学习路线首先咱们聊聊,学习网络安全方向通常会有哪些问题前排提示:文末有CSDN独家网络安全资料包!1、打基础时间太长学基础花费很长时间,光语言都有几门,有些人会倒在学习linux系统及命令的路上,更多的人会倒在学......
  • 2024网络安全学习路线,最全保姆级教程,学完直接拿捏!
    关键词: 网络安全入门、渗透测试学习、零基础学安全、网络安全学习路线首先咱们聊聊,学习网络安全方向通常会有哪些问题前排提示:文末有CSDN独家网络安全资料包!1、打基础时间太长学基础花费很长时间,光语言都有几门,有些人会倒在学习linux系统及命令的路上,更多的人会倒在学......
  • CSS 动画专题
    0x01过渡transition过渡(transition)是应用于特定元素的CSS属性,在指定时间内平滑过渡到目标样式(1)必要属性使用transition-property指定需要过渡的CSS属性可以列入一个或多个CSS属性也可以使用all值,表示所有变化的CSS属性都需要过渡仅可以用于过渡的值是可以......
  • 史上最全 Maven 教程,建议收藏!!
    大家好,我是胖虎,首先给大家分享两个产品无需魔法,国内可直接使用官方ChatGPT-4(Plus)、ChatGPT-4o!Java八股文面试小程序!如果你是有一定的开发经验,我相信你一定被项目lib下的JAR包折磨过,如果碰上兼容问题,更是逐个下载不同版本JAR包进行替换排查,相信是每个程序员都不想再经历......
  • css 蛇形排序
    先看效果需求:一个【4 *?】的网格布局,奇数行布局从左往右,偶数行布局从右往左。思路1:js将数组按4个每份进行分割,将偶数份进行反向,然后再将分割后的数据,重新组装。(太麻烦,劝退。)思路2:flex布局,然后用order属性来更改排列顺序。补充:or......
  • 史上最全的Linux常用软件安装教程【包含Docker安装】
    @目录1.系统版本2.已安装软件(1)常规方式安装的软件(2)docker安装的软件注意3.修改IP步骤4.Tips1.防火墙2.设置jar包开机自启动方式一(强烈推荐):service形式方式二:sh形式多服务同时启动/关闭3.编辑文件4.开机免密登录root5.设置禁止自动锁屏6.安装搜狗输入法7.环境变量配置汇总8.Doc......
  • Xpath 高级用法
    ○定位某元素同级元素的上一个 preceding-sibling::    ○(//li[@class="el-iconmorebtn-quickprevel-icon-more"]/preceding-sibling::li)[last()]   ○定位某元素同级元素的下一个following-sibling::    ○//li[@class="el-iconmorebtn-q......