Selenium之八大定位

八大定位

今天我们来学一学,selenium有名的八大定位方式;都有哪八个呢,下面我先列出来;之后再一个一个的实践

  • id,通过id定位元素
  • name,通过name定位
  • class_name,通过class类名定位
  • tag_name,通过标签名称
  • link_text,通过链接文本
  • partial_link_text,通过部分链接文本
  • xpath,通过xpth定位元素
  • css_selector,通过css选择器

以上就是著名的八大定位,下面就让我们一个一个的看,具体是怎么个一回事

ID

最快速、可靠的定位方式;当元素有唯一id时候

复制代码
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By

# broswer = webdriver.Chrome()
serve_path = r'D:\Code_Study\driver\chromedriver-win64\chromedriver.exe'
service = Service(serve_path)
browser = webdriver.Chrome(service=service)
# 访问网站
browser.get('https://www.selenium.dev/selenium/web/locators_tests/locators.html')
# + id,通过id定位元素,可以看到是一个输入框 
element = browser.find_element(By.ID, 'lname')
element.send_keys('selenium')
time.sleep(5)
print(element.tag_name) # input
name
复制代码
element = browser.find_element(By.NAME, 'wd')
element.send_keys('selenium')
time.sleep(5)
print(element.tag_name)  # input
class_name

适合通过class名定位,但是需要注意class不是唯一的,可能会有多个

复制代码
# 先通过name定位输入框,输入东西后;点击百度首页按钮
element = browser.find_element(By.NAME, 'wd')
element.send_keys('selenium')
time.sleep(5)
element = browser.find_element(By.CLASS_NAME, 'toindex')
element.click()
time.sleep(5)
tag_name

通过HTML的标签名定位,一般需要结合其他条件

复制代码
# 可以看到先通过定位左上角的id;后面再使用find_elements;找到a标签的列表集合
# 最后再循环遍历出来,每一个标签的href链接
# 注意:find_elements只有当找到的元素多个的时候,才可以使用;
# 可以直接后面加下标使用;前提是要知道所在位置
elements = browser.find_element(By.ID, 's-top-left').find_elements(By.TAG_NAME, 'a')
for element in elements:
    print(element.get_attribute('href'))
time.sleep(5)

用于定位超链接文本(完全匹配)

复制代码
# 可以看到,点击了新闻的跳转
element = (browser.find_element(By.LINK_TEXT, '新闻')
           .click())
time.sleep(5)

超链接文本的部分匹配

复制代码
# 可以看到,跳转到了hao123页面
element = (browser.find_element(By.PARTIAL_LINK_TEXT, 'hao')
           .click())
time.sleep(5)
xpath

最灵活的定位方式,适合复杂场景;xpath的内容,后面会单独讲一篇文章了;

复制代码
element = browser.find_element(By.XPATH, '//*[@id="kw"]')
element.send_keys('selenium')
time.sleep(5)
print(element.tag_name)  # input
css_selector

通过css选择器来进行定位,常用的有以下几种

  • #kw;意思是使用了id选择器

  • .toindex;意思是class选择器

  • input[name="wd"];属性选择器;意思是选择name="wd"的input标签

    #kw;可以看到,也是定位到了输入框

    element = browser.find_element(By.CSS_SELECTOR, '#kw')

    element = browser.find_element(By.CSS_SELECTOR, '.s_ipt')

    element = browser.find_element(By.CSS_SELECTOR, 'input[name="wd"]')

    element.send_keys('selenium')
    time.sleep(5)
    print(element.tag_name) # input

好了,八大定位都实践完毕了;但是其中出现了一些新的知识点;比如xpath,它的内容都需要单独讲一下

还有下面这个有没有s的区别

find_element和find_elements的区别详解

在 Selenium 中,find_elementfind_elements 是两种主要的元素定位方法,它们有以下关键区别:

核心区别对比

特性 find_element find_elements
返回值类型 返回单个 WebElement 对象 返回 WebElement 对象的列表
未找到元素时行为 抛出 NoSuchElementException 异常 返回空列表 []
使用场景 确定唯一存在的元素 查找多个相同特征的元素
方法后缀 单数形式 (element) 复数形式 (elements)

何时使用哪种方法?

使用 find_element 当:

  • 你确定页面上只有一个匹配元素
  • 元素是唯一标识的(如通过ID)
  • 如果元素不存在应该立即报错

使用 find_elements 当:

  • 需要获取多个相似元素(如所有表格行、所有图片)
  • 需要检查元素是否存在而不引发异常
  • 处理动态内容时更安全

八大定位讲完了,下一篇就讲一下Element的常见属性和方法

相关推荐
集成显卡6 小时前
PlayWright | 初识微软出品的 WEB 应用自动化测试框架
前端·chrome·测试工具·microsoft·自动化·edge浏览器
互联网杂货铺7 小时前
完美搭建appium自动化环境
自动化测试·软件测试·python·测试工具·职场和发展·appium·测试用例
测试老哥13 小时前
Jmeter如何进行多服务器远程测试?
自动化测试·软件测试·功能测试·测试工具·jmeter·测试用例·性能测试
鱼鱼说测试14 小时前
postman基础
测试工具·postman
程序员杰哥17 小时前
Postman常见问题及解决方法
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·postman
小堃学编程21 小时前
Selenium常用函数介绍
selenium·测试工具
羊米奇21 小时前
selenium-自动更新谷歌浏览器驱动
selenium·谷歌浏览器驱动更新
2501_9153738821 小时前
Selenium 和playwright 使用场景优缺点对比
selenium·测试工具
笑口常开的小丸子21 小时前
Selenium 中 JavaScript 点击的优势及使用场景
javascript·selenium·测试工具