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的常见属性和方法

相关推荐
春风又。25 分钟前
接口自动化——初识pytest
python·测试工具·自动化·pytest
一个幽默的程序员3 小时前
如何快速备份你的 API 吗? Postman 批量导出接口
测试工具·postman
Cc_Davis_cC3 小时前
postman发送请求报文到后台中文乱码
测试工具·postman
一个幽默的程序员3 小时前
Postman 集合如何快速分享给团队?
测试工具·postman
一个幽默的程序员18 小时前
Postman 如何发送 Post 请求上传文件? 全面指南
测试工具·postman
心灵宝贝18 小时前
Postman 7.3.5 旧版下载指南(Win64)及注意事项
测试工具·postman
测试19981 天前
postman测试文件上传接口详解
自动化测试·软件测试·python·测试工具·测试用例·接口测试·postman
微臣愚钝1 天前
【15】Selenium 爬取实战
爬虫·python·selenium
一个幽默的程序员1 天前
Postman 全局 Header 如何设置?全局设置了解一下
测试工具·postman
一个幽默的程序员1 天前
API 请求需要证书认证? 如何在 Postman 中正确配置和使用?
测试工具·postman