UI自动化-(web元素定位XPath实操入门)

一、元素定位之XPath

1 什么是XPath?

XPath 是一种在 XML 文档中查找数据的语言。它可以帮助我们快速地找到我们需要的信息。在编程中,我们可能需要从 XML 文件中提取数据,或者在网页上查找特定的元素。在这些情况下, XPath 可以帮助我们更快地找到我们需要的信息。

2 XPath元素定位

2.1 XPath定位策略

2.1.1 XPath定位策略简介
  • 路径定位
    • 通过指定元素在文档树中的位置来查找元素。例如,"/html/body"可以定位到 HTML 文档中的 body 元素。
  • 属性定位
    • 通过元素的属性值来查找元素。例如,"//div[@class='my-class']"可以定位到所有具有"class"属性且值为"my-class"的 div 元素。
  • 名称定位
    • 通过元素的名称来查找元素。例如,"//div"可以定位到所有 div 元素。
  • 索引定位
    • 通过元素在文档中的索引位置来查找元素。例如,"/html[1]/body"可以定位到 HTML 文档中的第一个 body 元素。
  • 属性与逻辑结合
    • 属性与逻辑结合进行定位是指在XPath中使用属性定位和逻辑运算符(如"and"、"or"等)来查找元素。例如,"//div[@class='my-class' and @id='my-id']"可以定位到所有具有"class"属性且值为"my-class",并且同时具有"id"属性且值为"my-id"的 div 元素。
  • 属性与层级结合
    • 属性与层级结合进行定位是指在XPath中使用属性定位和层级定位相结合的方式来查找元素。例如,"//div[@class='my-class' and parent::body]"可以定位到所有具有"class"属性且值为"my-class",并且是 body 元素的子元素的 div 元素。
2.1.2 XPath表达式
python语法:  find_element_by_xpath(xpath)   #
# 通过元素的属性信息定位到输入框并输入"百度一下,"
driver.find_element_by_xpath("//*[@autocomplete ='off']").send_keys("百度一下,")
2.1.3 可以在搜索框对XPath表达式进行校验

2.2 XPath定位实操入门

2.2.1 路径定位

  • 绝对路径  
    • 是指使用完整的元素路径来定位元素。例如,"/html/body/div"可以定位到 HTML 文档中 body 元素下的第一个 div 元素。
  • 表达式是以  /html开头,元素的层级之间是以  / 分隔
    • 相同层级的元素可以使用下标,下标是从1开始。
    • 需要列出元素所经过的所有层级元素   (工作当中, 一般不建议使用绝对路径)。
    • 示例:/html/body/div/div/div/div/div/form/span[1]/input

  • 相对路径  
    • 是指使用相对于当前元素的路径来定位元素。例如,".//div"可以定位到当前元素下的所有 div 元素。
  • 匹配任意层级的元素,  是以  // 开头。
  • 也可以使用下标,下标是从1开始。
  • 示例://span/input

代码示例:

# 导包
import time
from selenium import webdriver
# 创建浏览器驱动对象
driver = webdriver.Chrome()
# 打开百度网站
driver.get("https://www.baidu.com")
# 通过xpath的绝对路径定位到输入框并输入"百度一下,"
driver.find_element_by_xpath("/html/body/div/div/div/div/div/form/span[1]/input").send_keys("百度一下,")
# 等待2S
time.sleep(2)
# 通过xpath的相对路径定位到输入框并输入"你就知道!"
driver.find_element_by_xpath("//span/input").send_keys("你就知道!")
# 等待3S
time.sleep(3)
# 退出
driver.quit()
2.2.2 元素属性定位

  • 表达式格式      //*[@attribute='value']   # attribute表示的是元素的属性名,value表示的是元素对应属性值
  • 示例(可以通过元素的任一属性进行定位):
    • //*[@autocomplete ='off']
    • //*[@class ='s_ipt']
    • ……

代码示例:

# 导包
import time
from selenium import webdriver
# 创建浏览器驱动对象
driver = webdriver.Chrome()
# 打开百度网站
driver.get("https://www.baidu.com")
# 通过元素的autocomplete属性信息定位到输入框并输入"百度一下,"
driver.find_element_by_xpath("//*[@autocomplete ='off']").send_keys("百度一下,")
# 等待2S
time.sleep(2)
# 通过元素的class属性信息定位到输入框并输入"你就知道!"
driver.find_element_by_xpath("//*[@class ='s_ipt']").send_keys("你就知道!")
# 等待3S
time.sleep(3)
# 退出
driver.quit()

2.2.3 属性与逻辑结合定位

  • 表达式格式  //[@attribute1='value1' and @attribute2='value2'] # attribute1,attribute2表示的是元素的属性名,value1,value2表示的是元素对应的属性值
  • 示例://input[@autocomplete ='off'and @class ='s_ipt' ]

代码示例:

# 导包
import time
from selenium import webdriver
# 创建浏览器驱动对象
driver = webdriver.Chrome()
# 打开百度网站
driver.get("https://www.baidu.com")
# 通过元素的属性与逻辑信息定位到输入框并输入"百度一下,你就知道!"
driver.find_element_by_xpath("//input[@autocomplete ='off'and @class ='s_ipt' ]").send_keys("百度一下,你就知道!")
# 等待3S
time.sleep(3)
# 退出
driver.quit()

2.2.4 属性与层级结合定位

  • 表达式格式    //p[@id='pa']/input
  • 示例://span/input[@id='kw']

代码示例:

# 导包
import time
from selenium import webdriver
# 创建浏览器驱动对象
driver = webdriver.Chrome()
# 打开百度网站
driver.get("https://www.baidu.com")
# 通过元素的属性与层级结合定位到输入框并输入"百度一下,你就知道!"
driver.find_element_by_xpath("//span/input[@id='kw']").send_keys("百度一下,你就知道!")
# 等待3S
time.sleep(3)
# 退出
driver.quit()

2.3 XPath的其他用法

2.3.1 在XPath中,可以使用"text()"函数来定位元素的全部文本内容。例如,"//div[text()='Hello, world!']"可以定位到所有具有文本内容为"Hello, world!"的 div 元素。
  • 表达式  //*[text() = 'value']   value表示的是要定位的元素的全部文本内容.

2.3.2 在XPath中,可以使用"contains()"函数来定位元素的部分文本内容。例如,"//div[contains(text(),'Hello')]"可以定位到所有包含"Hello"文本的 div 元素。
  • 表达式  //*[contains(@attribute,'value')]   attribute表示的属性名称, value表示的是字符串

2.3.3 在XPath中,可以使用"starts-with()"函数来定位元素的文本内容以某些内容开头的元素。例如,"//div[starts-with(text(),'Hello')]"可以定位到所有以"Hello"开头的 div 元素。
  • 表达式  //*[starts-with(@attribute,'value')]      attribute表示的属性名称, value表示的是字符串
    要定位的元素,attribute属性的属性值是以value开头
  • 35
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值