当前位置: 首页 > news >正文

Selenium元素定位终极指南:8种方式全面解析+实战代码,告别找不到元素的烦恼!

小伙伴们,大家好~

今天给大家梳理一下自动化测试里面的selenium的八种元素定位方式

概念

元素定位:就是要让我们自动化代码找到前端网页中的元素(比如:按钮、输入框等)

注意:selenium定位前端元素有多个时,会默认返回第一个符合条件的元素

假设我们的前端代码如下:

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Selenium元素定位示例</title><style>body {font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;max-width: 800px;margin: 0 auto;padding: 20px;background-color: #f5f7f9;color: #333;}.container {background-color: white;border-radius: 8px;padding: 25px;box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);}h1 {color: #2c3e50;text-align: center;margin-bottom: 30px;}.form-group {margin-bottom: 15px;}label {display: block;margin-bottom: 5px;font-weight: 600;}input[type="text"],input[type="password"] {width: 100%;padding: 10px;border: 1px solid #ddd;border-radius: 4px;box-sizing: border-box;}.submit-btn {background-color: #3498db;color: white;border: none;padding: 12px 20px;border-radius: 4px;cursor: pointer;font-size: 16px;width: 100%;margin-top: 10px;}.submit-btn:hover {background-color: #2980b9;}.links {margin-top: 20px;text-align: center;}.footer {margin-top: 30px;text-align: center;font-size: 14px;color: #7f8c8d;}</style>
</head>
<body><div class="container"><h1>登录页面</h1><form><div class="form-group"><label for="username">用户名:</label><input type="text" id="username" name="username" class="submit-btn" placeholder="输入用户名"></div><div class="form-group"><label for="password">密码:</label><input type="password" id="password" name="password" class="submit-btn" placeholder="输入密码"></div><button type="submit" class="submit-btn">登录</button></form><div class="links"><a href="#">忘记密码?</a> | <a href="#" id="registerLink">点击这里注册</a> | <a href="#">联系我们</a></div><div class="footer"><p>© 2023 示例公司. 所有权利保留.</p></div></div>
</body>
</html>

image-20250905上午93828283

元素定位

1、通过 ID 定位

通过元素的 id 属性定位。id属性几乎是唯一,定位会非常准确

语法:find_element(By.ID, "id_value")

实现代码:

from selenium.webdriver.common.by import Byelement = driver.find_element(By.ID, "username")
2、通过 Name 定位

通过元素的 name 属性定位。前提是元素有name属性

语法:find_element(By.NAME, "name_value")

实现代码:

element = driver.find_element(By.NAME, "password")
3、通过 Class 定位

通过元素的 class 属性定位。但一般class属性不会唯一

语法:find_element(By.CLASS_NAME, "class_name")

代码实现:

element = driver.find_element(By.CLASS_NAME, "submit-btn")
4、通过 Tag Name 定位

通过元素的标签名定位(如

、 等)。非常快速找到同类标签

语法:find_element(By.TAG_NAME, "tag_name")

代码实现:

 element = driver.find_element(By.TAG_NAME, "input")
5、通过 CSS 选择器定位

通过 CSS 选择器定位元素。功能强大,写法灵活,强烈推荐!(可直接浏览器右键复制,简单易上手)

语法:find_element(By.CSS_SELECTOR, "css_selector")

代码实现:

 element = driver.find_element(By.CSS_SELECTOR, "input#username")
6、通过 XPath 定位

通过 XPath 表达式定位元素。比CSS稍微复杂,但几乎没有它搞不定的定位,强烈推荐!(可直接浏览器右键复制,简单易上手,但可能因为定位过长导致失败)

语法:find_element(By.XPATH, "xpath_expression")

代码实现:

 element = driver.find_element(By.XPATH, "//input[@id='username']")
7、通过 Link Text 定位

通过链接的文本内容定位(适用于 标签)

语法:find_element(By.LINK_TEXT, "link_text")

代码实现:

 element = driver.find_element(By.LINK_TEXT, "Click Here")
8、通过 Partial Link Text 定位

通过链接的部分文本内容定位(适用于 标签)。算是Link Text定位的简化版

语法:find_element(By.PARTIAL_LINK_TEXT, "partial_link_text")

代码实现:

 element = driver.find_element(By.PARTIAL_LINK_TEXT, "Click")
特殊:多个元素定位

有时无论如何修改定位,元素始终有多个,Selenium 提供了 find_elements 方法,返回一个元素列表,而不是直接返回元素(可以解决老大难的问题,尤其在vue等前端框架下非常好用)

语法: find_elements_by_class_name("class_value")

代码实现:

elements = driver.find_elements_by_class_name("csu")
元素定位黄金法则
  • 尽量使用 idname 等唯一属性定位元素

  • 如果元素属性是动态生成的(如随机 ID),不要使用这些属性定位

  • 使用代码等待确保元素加载完成后再进行操作

在我们实际的项目中使用最多的是CSS和XPath定位,由于现在vue等前端框架的使用,ID,name等属性都是由框架进行动态生成,所以使用CSS和XPath的组合定位会比较准确和简单一些。

描述
http://www.xdnf.cn/news/1468477.html

相关文章:

  • IPD变革,是中国企业实现产品与技术领先之路
  • 使用tomcat本地部署draw.io
  • 项目管理方法与企业战略目标如何对齐
  • VQ-VAE-2:开启高保真多样化图像生成的新范式
  • maven只使用本地仓库依赖
  • Maven常见问题解决方案
  • 关于Homebrew:Mac快速安装Homebrew
  • 七彩喜微高压氧舱:科技与体验的双重革新,重新定义家用氧疗新标杆
  • AI配音工具哪个好用?7款热门配音软件推荐指南!
  • 数据加盐处理(密码加盐)
  • webpack笔记
  • Golang Goroutine 与 Channel:构建高效并发程序的基石
  • Django REST framework:SimpleRouter 使用指南
  • uniapp开发小程序,列表 点击后加载更多数据
  • 国产测头如何破解三坐标测量“精度+效率”双重难题?
  • 永磁同步电机控制算法--传统IF控制结合滑模观测器的无感控制策略
  • 新后端漏洞(上)- Spring Cloud Gateway Actuator API SpEL表达式注入命令执行(CVE-2022-22947)
  • LINUX_Ubunto学习《2》_shell指令学习、gitee
  • 车载诊断架构 --- Service 14一丢丢小汇总
  • 水上乐园票务管理系统设计与开发(代码+数据库+LW)
  • 2025国赛B题创新论文+代码可视化 碳化硅外延层厚度的确定
  • AI“嘴替”已上线?Google Translate实时翻译
  • 【正则表达式】 正则表达式的分组和引用
  • Docker学习笔记(三):镜像与容器管理进阶操作
  • 解决“找不到 pip”
  • IAR借助在瑞萨RH850/U2A MCU MCAL支持,加速汽车软件开发
  • 多模联邦查询网关:ABP + Trino/Presto 聚合跨源数据
  • 【更新完毕】2025数学建模国赛E题思路代码文章高教社杯全国大学生数学建模-AI 辅助智能体测
  • 解密大语言模型推理:输入处理背后的数学与工程实践
  • 【论文阅读】FedsNet: the real‑time network for pedestrian detection based on RT‑DETR