UI自动化框架之Selenium八大元素定位(二)

UI自动化框架之Selenium八大元素定位(二)

  • 一、Selenium八大元素定位方式
    • [1.1 ID定位](#1.1 ID定位)
    • [1.2 name定位](#1.2 name定位)
    • [1.3 Class Name定位](#1.3 Class Name定位)
    • [1.4 Tag Name定位](#1.4 Tag Name定位)
    • [1.5 Link Text定位](#1.5 Link Text定位)
    • [1.6 Partial Link Text定位](#1.6 Partial Link Text定位)
    • [1.7 CSS Selector定位](#1.7 CSS Selector定位)
    • [1.8 XPath定位](#1.8 XPath定位)
    • [1.9 元素定位总结](#1.9 元素定位总结)

一、Selenium八大元素定位方式

在Selenium WebDriver中,有八大常用的定位方式,可以帮助我们在网页中快速准确地定位和操作。

1.1 ID定位

通过元素的ID属性来定位,这是一种最快的定位方式。

python 复制代码
from selenium import webdriver 
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()

driver.get("https://www.baidu.com/")

ele = driver.find_element(By.ID,'chat-submit-button')

1.2 name定位

通过元素的name属性来定位。

python 复制代码
from selenium import webdriver 
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()

driver.get("https://www.baidu.com/")

ele = driver.find_element(By.NAME,'name')

1.3 Class Name定位

通过元素的class属性来定位,如果一个元素有对个类,可以使用.class1.class2的形式。

python 复制代码
from selenium import webdriver 
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()

driver.get("https://www.baidu.com/")

ele = driver.find_element(By.CLASS_NAME,'chat-input-scroll-style')

ele = driver.find_element(By.CLASS_NAME,'.chat-input-textarea.chat-input-scroll-style')

1.4 Tag Name定位

通过元素的html标签名来定位,如p,div,span等。同类型标签很多,定位不唯一,一般会结合其他定位方式一起使用。

html 复制代码
<p>这是一段html</p>
<ul>
<li><a href="#">这是一个a链接<a></li>
<li><a href="#">这是一个a链接<a></li>
<li><a href="#">这是一个a链接<a></li>
<li><a href="#">这是一个a链接<a></li>
<ul>
python 复制代码
from selenium import webdriver 
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()

driver.get("https://www.baidu.com/")

# 获取第一个a链接
ele = driver.find_element(By.TAG_NAME,'a')

# 获取所有a链接
ele = driver.find_elements(By.TAG_NAME,'a')

通过元素的链接文本标签来定位。只能用于链接元素,且文本需要完全匹配

python 复制代码
from selenium import webdriver 
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()

driver.get("https://www.baidu.com/")

ele = driver.find_element(By.LINK,'首页')

通过元素的链接文本的一部分来定位标签,这在链接文本很长时非常有用。

python 复制代码
from selenium import webdriver 
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()

driver.get("https://www.baidu.com/")

ele = driver.find_element(By.PARTIAL,'这个是我的书签')

1.7 CSS Selector定位

通过CSS选择器来定位元素。可组合各种条件查找

python 复制代码
from selenium import webdriver 
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()

driver.get("https://www.baidu.com/")

ele = driver.find_element(By.CSS_SELECTOR,'span.check_name')

1.8 XPath定位

通过XPath表达式来定位。是一种强大的定位方式,可以实现任何复杂的定位需求。但语法稍微复杂,性能相对较慢,当其他定位方式都无法正确找到元素时,可以使用该方式。

绝对路径不推荐使用。

python 复制代码
from selenium import webdriver 
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()

driver.get("https://www.baidu.com/")

# // 指的是相对路径,从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置
# 通配符*表示未知的元素, //* 定位所有元素
# 属性定位 [@属性名称="属性值"] @id是通过ID来定位,@class是通过class定位,@name通过name来定位
ele = driver.find_element(By.XPATH,'//*[@id="chat-textarea"]')

拓展

XPath轴定位

语法:轴名称::标签名

轴名称 描述
ancestor 选取当前节点的祖先节点
parent 选取当前节点的父节点
preceding 选取当前元素之前的所有节点
following 选取当前元素之后的所有节点
sibling 选取当前节点的同级节点,即兄弟节点
preceding-sibling 选取当前节点的之前的同级节点
following-sibling 选取当前节点的之后的同级节点
child 选取当前节点的下层所有的子节点
text 复制代码
# 找到祖先节点
//input[@id="kw"]//ancestor::div

# 找到父节点
//input[@id="kw"]//parent::span

# 选取当前元素之前的所有节点
//input[@id="kw"]//preceding::span/span

1.9 元素定位总结

  1. ID定位是最快的,因为它是直接通过元素的ID进行匹配
  2. Name适用于表单元素等具有name属性的
  3. XPath和CSS Selector提供了强大的选择能力,可以精准地选择任何元素,可能会比其他方法慢
  4. Link Text和Partial Link Text适用于链接元素
  5. TagName和Class Name提供了元素类型或类的快速选择能力
  6. 新的Selenium推荐使用find_element()配合By类来代替之前的各种find_element_by_*方法,这样可以提高代码的可读性和未来兼容性
相关推荐
ClouGence43 分钟前
不搭 Selenium 或 Playwright,怎么测试公司的内网业务?
selenium·测试
东莞市壹星自动化设备有限公司4 小时前
透明圆瓶内部特征怎样定位:折射追踪与近远相位分支
嵌入式硬件·自动化·需求分析·几何学·骨骼绑定
BioTender6 小时前
Xaira 发布 X-Automate:将物理 AI 与智能体 AI 引入实验室自动化
运维·人工智能·自动化
wuyk5556 小时前
PyQt6-第15讲-数据可视化QChart
python·ui·信息可视化·pyqt
天远API19 小时前
零信任架构实战:基于天远运营商三要素详版V即时版构建自动化消费电子大促电商平台高价值权益秒杀与优惠券防羊毛高并发实名核验网关
运维·人工智能·架构·自动化
木头左1 天前
【Python】不点浏览器发博客:逆向 CSDN 创作中心接口做 md-publish 技能
python·自动化·api
lisw051 天前
智能化机器人系统的模块化设计自动化!
机器学习·机器人·自动化
天远Date Lab2 天前
零信任架构实战:基于天远租凭分期报告构建自动化汽车以租代购免押风控网关
网络·人工智能·架构·自动化
迪康Defender2 天前
终端供应链安全:应用白名单与软件正版化检测落地|终端安全治理实践
运维·服务器·网络·安全·web安全·自动化·运维开发
天远API2 天前
零信任架构实战:基于天远租凭分期报告构建自动化智慧租房免押分期履约评估网关
运维·人工智能·架构·自动化