元素定位练习 · CSS 选择器定位

练习 By.CSS_SELECTOR 定位方法的核心实操与效果验证

首页 定位导航

练习说明

本页面提供 By.CSS_SELECTOR 定位方法的完整练习场景。页面包含练习要求描述卡(方法概念 + Selenium 示例 + 练习清单)和定位后操作效果展示区域,在输入框输入内容、点击按钮、勾选选择框时,效果展示区会实时显示对应卡片。

方法 8:By.CSS_SELECTOR — 通过 CSS 选择器定位

比 XPath 更简洁、执行速度更快;浏览器原生解析,支持 #id、.class、属性匹配、组合符(> + ~ 空格)、伪类(:nth-child / :checked / :disabled / :not)等;不支持文本内容匹配和向上父级轴定位。

练习要求 · 方法 8:By.CSS_SELECTOR
📌 方法概念
原理:CSS 选择器是浏览器渲染页面时原生使用的定位语法,通过元素的标签、属性、class/id、层级关系等组合来定位;浏览器底层直接解析,比 XPath 更简洁、执行速度更快。
适用场景:
① class 有特征(判断标准:用这个 class 当选择器,能不能精准定位到你想要的元素 —— 不是一堆,也不是零个):
    ✅ 好 class(有特征):.login-btn 只能定位登录按钮这 1 个;.danger-btn 只能定位"删除 / 清空"这组危险操作按钮 —— 拿得准。
    ❌ 差 class(没特征):.btn 页面上所有 30 个按钮都有 —— 定位多个元素,分不清谁是谁。
    定位精准 → 有特征;定位多了或少了 → 没特征。
    多 class 组合可以让它变精准:.nav-item.active(同时满足两个 class)比单独用 .nav-item(一堆)或 .active(可能别处也有)都更准。
② 属性前缀/后缀/子串:id 是 css_btn_login_1 这种动态数字 → [id^='css_btn_login'] 前缀匹配;
    href 都是 .html 结尾 → a[href$='.html'] 后缀匹配;class 含 btn 子串 → [class*='btn'] 子串匹配;
③ 按位置取:6 个任务项取奇数位 → #task_list li:nth-child(odd);取第 3 个 → li:nth-child(3);
④ 状态筛选:勾选了通知的复选框 → input[name='notify']:checked;置灰禁用的按钮 → button:disabled;
⑤ 层级/组合:找某个容器内的按钮 → #sidebar .menu-item(后代),.card > .title(直接子级),.label + .input(紧邻下一个兄弟)。
注意事项:不支持 text() 文本内容匹配,不支持 parent:: 向上父级轴定位,索引从 1 开始(与 XPath 一致但不同于 JS 的 0 基)。
💻 Selenium 示例(Python)
from selenium import webdriver
from selenium.webdriver.common.by import By
form = driver.find_element(By.CSS_SELECTOR, "#sec-by-css .register-form")  # 组合定位:id + class + 后代
even_tasks = driver.find_elements(By.CSS_SELECTOR, "#css_task_list li:nth-child(even)")  # 偶数位任务
notify_checks = driver.find_elements(By.CSS_SELECTOR, "#sec-by-css input[name='css_notify']:checked")  # 已勾选通知
📋 本节练习清单
  • ✅ 练习目标 1:个人设置表单 — 填写昵称/年龄/签名 → 勾选/取消通知复选框(练习 :checked)→ 点标签切换 .active → 点「保存设置」观察效果区输出;再点「重置设置」验证默认值恢复(:checked 只剩系统公告、标签只剩自动化测试)
  • ✅ 练习目标 2:任务清单 6 条 — 点击 li 切换完成态(出现 .done 类 + 删除线);练习 :nth-child(odd) 取奇数位、li[data-priority='urgent'] 取紧急项、.done 取已完成项;最后打开浏览器 F12 控制台,输入 $$('.css-tag.active').length 回车,对比 Selenium 脚本里 len(driver.find_elements(By.CSS_SELECTOR, ".css-tag.active")) 的值是否一致(底层都是 querySelectorAll,应该完全相同)

练习目标 1:个人设置表单(#id / [name] / :checked / .css-tag.active)

操作步骤:
① 填写昵称 / 年龄 / 个性签名文本框 → find_element(By.CSS_SELECTOR, "#css_form_settings input[name='css_nickname']")
② 勾选/取消 4 个通知复选框 → find_elements(By.CSS_SELECTOR, "input[name='css_notify']:checked")(:checked 伪类取已勾选项)
③ 点 5 个兴趣标签切换选中态 → find_elements(By.CSS_SELECTOR, ".css-tag.active")(.active 类表示已选中)
④ 点「保存设置」观察效果区输出
⑤ 点「重置设置」验证默认值恢复(:checked 只剩系统公告、.active 只剩自动化测试)

个人设置

练习 CSS 选择器:#id / [name] / :checked / .css-tag.active / 多属性组合

自动化测试 接口测试 性能测试 安全测试 测试开发

练习目标 2:任务清单 6 条(:nth-child / [data-priority] / .done)

操作步骤:
① 点击任意 li 切换完成态(出现 .done 类 + 删除线)
② 练习 3 个选择器写法:
  #css_task_list li:nth-child(odd) 取奇数位任务
  #css_task_list li[data-priority='urgent'] 取紧急任务
  #css_task_list li.done 取已完成任务
③ 打开浏览器 F12 控制台,输入 $$('#css_task_list li.done').length 回车,对比 Selenium 脚本里 len(driver.find_elements(By.CSS_SELECTOR, "#css_task_list li.done")) 是否一致

    CSS 定位效果展示

    当前尚无操作记录

    请尝试:① 设置表单填写→勾选通知→选标签→保存 ② 重置设置 ③ 任务清单点击 6 条切换完成态

    关于我们

    Python 自动化测试学习平台是一个面向软件测试工程师、开发人员及在校学生的交互式在线学习平台,专注于 Selenium WebDriver 与 Python unittest 自动化测试技能的教学与实践。

    我们以"理论 + 实战 + 可交互演示"为核心特色,将八种常规元素定位和Javascript定位、元素操作、自动化测试工具、单元测试、测试模型等知识体系拆分为模块化课程,每个模块都配有可点击、可输入、可运行的模拟练习页面。

    平台致力于降低自动化测试的入门门槛,让学习者从"看懂代码"到"动手实操",逐步掌握企业级自动化测试框架的设计与落地能力。

    联系方式

    📧邮箱:lq@selenium-auto-test.com

    📞电话:0755-12345678

    📍地址:深圳

    💬微信公众号:Selenium自动化测试

    🐙GitHub:github.com/selenium-auto-test

    免责声明

    1. 本平台所有示例代码、演示页面及教程内容均仅供学习交流使用,不构成任何商业推广或技术服务承诺。

    2. 平台中的 Selenium API 描述、Python 语法说明均以官方文档为准,如有版本差异请以对应官方文档为准。

    3. 学习者在实际项目中应用平台所学内容时,应结合自身项目环境进行充分测试,本平台不对因直接使用示例代码而产生的任何直接或间接损失承担责任。

    4. 本平台所引用的第三方库(Selenium、ChromeDriver、unittest 等)版权归其各自作者及维护者所有。

    5. 如涉及版权问题或内容建议,请及时通过联系方式与我们沟通,我们将第一时间处理。