在Selenium WebDriver中,定位网页元素是实现自动化测试和操作的基础。Selenium提供了多种元素定位方式,每种方式都有其特点和适用场景。以下是Selenium中的八大元素定位方式:
所有定位元素都是基于百度来进行的:(selenium版本:4.23.0)
在介绍定位方式之前先来说一下定位工具,以Chrome浏览器为例,使用F12或右键检查进入开发者工具
from time import sleep
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
- ID定位。通过元素的ID属性来定位元素,元素必须具备有ID属性才可以使用。正常情况下来说ID值是唯一的
driver.find_element('id','kw').send_keys('selenium的定位方法')
driver.find_element('id','su').click()
- name定位。根据元素的name属性来定位元素。name属性是可以重复的,使用的时候要注意
driver.find_element('name','wd')
- class定位。根据元素的class属性来定位元素。name属性是可以重复的,使用的时候需要注意。
如果说class name是一个复合类(就是存在多个属性),则只能使用其中的任意一个属性值进行元素定位,不建议这么做,因为有可能会定位到多个元素
driver.find_element('class name','s_ipt')
- tag_name。通过元素的标签名来定位。比如input标签,a标签等。
因为存在大量的标签,而且重复性高,所以再使用的时候需要确定能够代表目标元素的唯一性,才能使用。一般情况下,不建议使用这个方法来定位元素
driver.find_element('tag name','input')
- link_text。定位a标签。即a标签的全部文本内容,该该方法只能用于a标签。
driver.find_element('link text', '新闻')
- partial_link_text 定位。模糊匹配。通过元素的文本来进行模糊匹配。只限于a标签。也就是a标签的部分文本内容。如果有多个元素,默认返回第一个。
driver.find_element('partial link text', '新')
- css_selector定位。通过css选择器语法定位元素。定位界的万金油
- #element_id。定位具有id属性的元素
driver.find_element('css selector', "#kw")
- .class_name.定位class的元素属性
driver.find_element('css selector', ".s_ipt")
- tag_name。定位具有指定标签的所有元素
driver.find_element('css selector', "style")
- 通过属性或部分属性查找
通过属性查找
# driver.find_element('css selector', "标签名[属性='属性值']")
driver.find_element('css selector', "style[type="text/css"]")
# driver.find_element('css selector', "[属性='属性值']")
driver.find_element('css selector', "[type="text/css"]")
通过部分属性查找
# 查找class属性值以t开头的元素
driver.find_element('css selector','[class^="t"]')
# 查找class属性值以t结尾的元素
driver.find_element('css selector','[class$="t"]')
# 查找class属性值中包含t的元素
driver.find_element('css selector','[class*="t"]')
- 根据元素的父子关系查找。也就是层级关系
driver.find_element('css selector','div>div>div>div>div')
- 通过兄弟节点查找。
兄弟节点就是同一父级元素下,存在多个相同子标签。这些子元素就是兄弟节点
# 使用:a:nth-child(n) 来定位子标签,n表示第几个元素
# 定位第1 个a子标签:
driver.find_element('css selector','div#s-top-left>a:nth-child(1)')
- xpath属性定位。
- 绝对路径。就是从HTML的根目录下一层一层的往下找。
driver.find_element('xpath','html/head/script/...')
- 相对路径。就是从第一个符合条件元素开始查找。以
//
开头,后边是跟标签名称或者*
(*
表示所有元素)- 语法:
//标签名或*[@(属性)id(属性名称)="kw"(属性值)]
查找框是:CTRL + F
- 语法:
- text()文本值定位。
通过标签的文本值。一般适用于p标签,a标签
driver.find_element(By.XPATH, "//*[text()='新闻']").click()