微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

selenium元素定位篇:xpath定位

什么是xpath?
XPath 是一门在 XML 文档中查找信息的语言。XPath 用于在 XML 文档中通过元素和属性进行导航。

xpath定位可以通过绝对路径定位,也可以通过相对路径定位。
绝对路径定位:从文档的根节点开始,逐层定位。类似与我们电脑中的文件绝对路径
如:/html/body/app-root/html/body/app-root/div
由于绝对路径不灵活,当文档结构一旦发生改变,就肯能导致定位不准确,甚至无法定位,故不推荐。

相对路径定位:从文档中的任何位置开始,以//开头。那么我们说一下通过相对路径定位的方式:
方式1:通过元素属性定位
举例://input[@class='xxx']
这样就可以定位到属性class且值为xxx的input标签了。
如果需要定位子标签,可以用/
举例://input[@class='xxx]/div
这样就可以定位到input(class属性为xxx)的子标签div了。

 

方式2:通过索引号定位
举例://input/div[1]
这样就可以定位到inpu标签下的第一个div标签了。
注意:在xpath中,索引是从1开始。
拓展:当相同子标签较多时,如果直接定位到最后一个?可以通过last()
举例://input/div[last()]
这样就可以直接定位到子标签中的最后一个了。同样,如果是定位到倒数第二个,可以用last()-1,即//input/div[last()-1]

 

方式3:通过属性值模糊匹配定位
模糊匹配定位主要有2种:


如图中,//label[starts-with(@class, 'btn'],可以定位到class属性值以btn开头的label标签
如图中,//label[contains(@class,'btn')],可以定位到class属性值包含btn的label标签
注意:starts-with()与contains()都是函数,所以需要将属性值传入其中,区别与直接定位(@属性名=属性值),模糊定位的这两
函数属性名与属性值为2个参数,故不需要等号。

 

 

方式4:通过标签文本内容定位
如我们有这样一个元素:<label class="control_label">账号</label>
我们可以看到该元素的文本类容为'账号',那么我们就可以通过文本来定位://label[text()='账号']
注意:通过文本定位不同于通过属性值定位,无需使用@符号,直接使用text()=文本内容即可。

 

方式5:通过逻辑表达式来精确定位
有时候,我们仅仅通过一个属性值无法精确的定位到某个元素,这时候我们可以通过逻辑运算符
来进行帮助我们进行精确的定位。
格式为//标签名[@属性1='属性值1' and @属性2='属性值2'...]
举例://book[@category=”web” and @cover=”paperback”]
这样我们就可以定位到category属性值为web,且cover属性值为paperback的book元素了。只有
同时满足这两个条件的元素才会被定位到。
拓展:逻辑表达式还有or(或),!=(非),以及not。
举例://book[@category=”web” or @cover=”paperback”],//book[@category!='web']
其实,属性名=属性值这种表达式,也可以用>,<等等,灵活运用

方式6:通过轴定位(待补充)

 

在python中,通过xpath定位的方法如下:

    def find_element_by_xpath(self, xpath):
        """
        Finds an element by xpath.

        :Args:
         - xpath - The xpath locator of the element to find.

        :Returns:
         - WebElement - the element if it was found

        :Raises:
         - NoSuchElementException - if the element wasn't found

        :Usage:
            element = driver.find_element_by_xpath('//div/td[1]')
        """
        return self.find_element(by=By.XPATH, value=xpath)

 

参数xpath:元素的xpath定位表达式。xpath表达式错误肯定会导致无法成功定位元素,那么就需要
进行验证其正确性后才能使用。
返回值:如果找到元素,则返回WebElement对象。否则,抛出NoSuchElementException异常。
用法举例:element = driver.find_element_by_xpath("//input[@class='kw']")

拓展:selenium中,八种定位方式最终都是通过调用find_element(by, value)方法

 







 

 

 

 

 


 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐