Selenium 详解xpath定位

xpath定位在业界被戏称为元素定位的"屠龙宝刀",宝刀在手,武林我有。如今咱们就来详解xpath定位方法。python

1、xpath经过元素属性定位


xpath能够经过元素的属性来定位,如id,name,class,type等属性,元素的任意属性值均可以经过xpath来定位,只要这个属性值能惟一的标识一个元素web

咱们还以百度首页的搜索框为例,用xpath经过不一样属性来定位它。chrome

代码:浏览器

# coding = utf-8
from time import sleep
from selenium import webdriver

# 驱动文件路径
driverfile_path = r'D:\coship\Test_Framework\drivers\chromedriver.exe'
# 启动浏览器
driver = webdriver.Chrome(executable_path=driverfile_path)
# 打开百度首页
driver.get(r'https://www.baidu.com/')

# 用xpath经过id属性来定位搜索框
# driver.find_element_by_xpath("//*[@id='kw']").send_keys('selenium')

# 用xpath经过name属性来定位搜索框
# #driver.find_element_by_xpath("//*[@name='wd']").send_keys('selenium')

# 用xpath经过class属性来定位搜索框
# driver.find_element_by_xpath("//*[@class='s_ipt']").send_keys('selenium')

# 用xpath经过maxlength属性来定位搜索框
# driver.find_element_by_xpath("//*[@maxlength='255']").send_keys('selenium')

# 用xpath经过autocomplete属性来定位搜索框
driver.find_element_by_xpath("//*[@autocomplete='off']").send_keys('selenium')

# 等待5秒
sleep(5)
# 退出
driver.quit()

2、xpath经过限定元素标签订位


 

  • * 表示从当前页面全部的标签(tag)中来寻找元素
  • 有时候一个元素的属性值与其余元素是相同的,咱们能够经过限定标签(tag)来定位

代码:ui

# coding = utf-8
from time import sleep
from selenium import webdriver

# 驱动文件路径
driverfile_path = r'D:\coship\Test_Framework\drivers\chromedriver.exe'
# 启动浏览器
driver = webdriver.Chrome(executable_path=driverfile_path)
# 打开百度首页
driver.get(r'https://www.baidu.com/')
# 用xpath限定标签名为input并经过id属性来定位搜索框
driver.find_element_by_xpath("//input[@id='kw']").send_keys('selenium')
# 等待5秒
sleep(5)
# 退出
driver.quit()

3、层级与属性结合定位


 

若是一个元素自己没有可利用的属性来定位,那么咱们能够先找到它的上一级(父元素),再经过上一级来找到它。以此类推,若是它的上一级也没有能够定位的属性值,那么再找上上一级,直到找到能够定位到的那一级元素spa

代码:code

# coding = utf-8
from time import sleep
from selenium import webdriver

# 驱动文件路径
driverfile_path = r'D:\coship\Test_Framework\drivers\chromedriver.exe'
# 启动浏览器
driver = webdriver.Chrome(executable_path=driverfile_path)
# 打开百度首页
driver.get(r'https://www.baidu.com/')
# 用xpath经过上上一级来定位搜索框
driver.find_element_by_xpath("//*[@id='form']/span/input").send_keys('selenium')
# 等待5秒
sleep(5)
# 退出
driver.quit()

4、标签索引定位


 

有时候,同一层级下有多个相同标签的元素,那么咱们就只能经过标签索引来精肯定位到元素了orm

好比咱们要定位百度首页“百度一下”按钮,它的父级元素是标签<form>下的第二个<span>。这里要注意一下,这里的索引(从1开始)与python序列中的索引(从0开始)不一样blog

代码:索引

# coding = utf-8
from time import sleep
from selenium import webdriver

# 驱动文件路径
driverfile_path = r'D:\coship\Test_Framework\drivers\chromedriver.exe'
# 启动浏览器
driver = webdriver.Chrome(executable_path=driverfile_path)
# 打开百度首页
driver.get(r'https://www.baidu.com/')
driver.find_element_by_id('kw').send_keys('selenium')
# 用xpath经过标签索引定位"百度一下"按钮
driver.find_element_by_xpath("//*[@id='form']/span[2]/input").click()
# 等待5秒
sleep(5)
# 退出
driver.quit()

5、逻辑运算


 

若是一个属性不能惟一地区分一个元素,须要两个或者两个以上的属性才能定位到元素,那么咱们能够用逻辑运算符来链接两个或多个属性来定位元素,支持与(and),或(or),非(not)

代码:

# coding = utf-8
from time import sleep
from selenium import webdriver

# 驱动文件路径
driverfile_path = r'D:\coship\Test_Framework\drivers\chromedriver.exe'
# 启动浏览器
driver = webdriver.Chrome(executable_path=driverfile_path)
# 打开百度首页
driver.get(r'https://www.baidu.com/')
# 用xpath经过经过逻辑运算and来定位搜索框
driver.find_element_by_xpath("//*[@id='kw' and @name='wd']").send_keys('selenium')
# 等待5秒
sleep(5)
# 退出
driver.quit()
相关文章
相关标签/搜索