CSS Selectors

embedded/2025/3/6 9:19:53/

当然,理解纯CSS选择器(CSS Selectors)对于进行UI自动化测试非常重要。CSS选择器允许您通过元素的属性、层级关系、类名、ID等来精准定位页面上的元素。下面我将详细讲解CSS选择器的常见用法,并结合您的需求提供具体的示例。

1. 基本选择器

  • 元素选择器:选择特定类型的HTML元素。

    css">div { /* 选择所有div元素 */ }
    
  • ID选择器:通过元素的id属性选择单个元素。

    css">#stats-8306 { /* 选择id为stats-8306的元素 */ }
    
  • 类选择器:通过元素的class属性选择元素。

    css">.canvas-class { /* 选择所有具有class="canvas-class"的元素 */ }
    

2. 组合选择器

  • 后代选择器:选择某个元素内部的所有特定后代元素。

    css">div.parent-class span { /* 选择所有在div.parent-class内的span元素 */ }
    
  • 子选择器:选择某个元素的直接子元素。

    css">div > span { /* 选择所有div元素的直接子span元素 */ }
    
  • 相邻兄弟选择器:选择紧接在另一个元素之后的同级元素。

    css">div#stats-8306 + div { /* 选择紧跟在div#stats-8306后面的div元素 */ }
    
  • 通用兄弟选择器:选择某个元素之后的所有同级元素。

    css">div#stats-8306 ~ div { /* 选择所有在div#stats-8306之后的div元素 */ }
    

3. 属性选择器

  • 属性存在选择器:选择具有特定属性的元素。

    css">[data-stats-id] { /* 选择所有具有data-stats-id属性的元素 */ }
    
  • 属性值选择器:选择属性值等于特定值的元素。

    css">[data-stats-id="8306"] { /* 选择data-stats-id属性值为8306的元素 */ }
    
  • 包含文本的选择器:CSS标准中没有直接通过文本内容选择元素的选择器,但有些框架(如jQuery)支持:contains伪类。在纯CSS中,无法实现这一点,需要通过其他方式。

4. 伪类选择器

伪类用于定义元素的特殊状态。

  • :nth-of-type(n):选择同类型中的第n个元素。

    css">div:nth-of-type(1) { /* 选择第一个div元素 */ }
    
  • :last-child:选择父元素的最后一个子元素。

    css">div:last-child { /* 选择父元素中的最后一个div元素 */ }
    

5. 综合示例

假设您的HTML结构如下:

<div data-stats-id="8306"><div>鲜时光</div><div><div class="solar-combo-chart"><canvas></canvas></div></div>
</div>
目标

定位data-stats-id="8306"下的文本为“鲜时光”的div之后的canvas元素。

CSS选择器实现

由于纯CSS无法通过文本内容直接选择元素,我们需要依赖元素的层级和属性来定位。

  1. 通过层级关系定位canvas

    如果“鲜时光”的div后面紧跟包含canvasdiv,可以使用相邻兄弟选择器:

    css">div[data-stats-id="8306"] > div + div .solar-combo-chart canvas
    

    解释

    • div[data-stats-id="8306"]:选择具有data-stats-id="8306"属性的div
    • > div:选择其直接子div(即“鲜时光”所在的div)。
    • + div:选择紧随其后的兄弟div(即包含canvasdiv)。
    • .solar-combo-chart canvas:在找到的div中选择具有类名solar-combo-chart的子div中的canvas元素。
  2. 如果结构更复杂,使用通用兄弟选择器

    如果“鲜时光”的div和包含canvasdiv之间有不确定的层级,可以使用通用兄弟选择器:

    css">div[data-stats-id="8306"] div:contains('鲜时光') ~ div .solar-combo-chart canvas
    

    注意:contains在标准CSS中不可用。因此,这种方法需要确保HTML结构允许使用其他选择器。

  3. 通过明确的类名或属性

    如果“鲜时光”的div有唯一的类名,可以更精准地定位:

    <div class="unique-class">鲜时光</div>
    

    对应的CSS选择器:

    css">div[data-stats-id="8306"] > .unique-class + div .solar-combo-chart canvas
    

6. 在UI自动化中的应用

在UI自动化测试中,CSS选择器通常用于定位页面元素,以便进行点击、输入等操作。以下是一些常见框架中使用CSS选择器的示例:

  • Selenium(Python)

    from selenium import webdriverdriver = webdriver.Chrome()
    driver.get('your_website_url')# 定位canvas元素
    canvas = driver.find_element_by_css_selector("div[data-stats-id='8306'] > div + div .solar-combo-chart canvas")# 进行操作,例如点击
    canvas.click()
    
  • Cypress

    cy.get("div[data-stats-id='8306'] > div + div .solar-combo-chart canvas").should('exist').click();
    
  • Playwright

    const { chromium } = require('playwright');(async () => {const browser = await chromium.launch();const page = await browser.newPage();await page.goto('your_website_url');const canvas = await page.$("div[data-stats-id='8306'] > div + div .solar-combo-chart canvas");await canvas.click();await browser.close();
    })();
    

7. 实用技巧

  • 使用开发者工具验证选择器

    1. 打开浏览器的开发者工具(通常按F12)。
    2. 在“Elements”面板中,右键点击目标元素,选择“Copy” > “Copy selector”(复制选择器)。
    3. 或者在控制台中使用document.querySelector测试选择器:
      document.querySelector("div[data-stats-id='8306'] > div + div .solar-combo-chart canvas");
      
      如果返回目标元素,说明选择器正确。
  • 避免过于复杂的选择器
    尽量保持选择器的简洁和可维护性。过于复杂的选择器可能在HTML结构变化时容易失效。

  • 优先使用唯一标识符
    如果元素有唯一的idclass,优先使用它们来定位,这样更高效且稳定。

8. 总结

纯CSS选择器功能强大,能够满足大多数UI自动化测试中的元素定位需求。通过理解元素的结构、属性和层级关系,您可以编写精准且高效的选择器来定位目标元素。以下是您可能需要记住的一些关键点:

  • 使用data-*属性进行定位,因为它们通常用于存储自定义数据,且具有较高的唯一性。
  • 利用层级关系(如子选择器和相邻兄弟选择器)来缩小选择范围。
  • 尽量避免依赖文本内容进行定位,除非使用支持伪类的框架。

如果您有更具体的HTML结构或遇到特定的问题,请提供更多细节,我可以为您提供更有针对性的帮助!


http://www.ppmy.cn/embedded/170446.html

相关文章

AI浪潮下的软件工程师:如何在变革中突破自我,掌握AI技术

AI浪潮下的软件工程师&#xff1a;如何在变革中突破自我&#xff0c;掌握AI技术 引言 随着人工智能&#xff08;AI&#xff09;技术的飞速发展&#xff0c;各行各业都在经历前所未有的变革。软件工程师作为技术领域的核心力量&#xff0c;面临着新的挑战和机遇。本文将探讨在…

Docker01 - docker快速入门

Docker快速入门 文章目录 Docker快速入门一&#xff1a;Docker概述1&#xff1a;虚拟机技术和容器化技术2&#xff1a;Docker名词解释2.1&#xff1a;Docker镜像(images)2.2&#xff1a;Docker容器(containers)2.3&#xff1a;Docker仓库(registry) 3&#xff1a;Docker下载安装…

【LeetCode226】翻转二叉树

题目描述 给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&#xff0c;并返回其根节点。 思路与算法 这个问题自然是递归的&#xff0c;因为反转一棵树涉及到反转它的子树。 让 f(node) 是一个函数&#xff0c;用于反转以 node 为根的二叉树。如果 node 有左子树 L…

三参数水质在线分析仪:从源头保障饮用水安全

【TH-ZS03】饮用水安全是人类健康的重要保障&#xff0c;其质量直接关系到人们的生命健康。随着工业化、城市化的快速发展&#xff0c;水体污染问题日益严峻&#xff0c;饮用水安全面临着前所未有的挑战。为了从源头保障饮用水安全&#xff0c;科学、高效的水质监测手段必不可少…

VTK知识学习(45)- 基本的图形操作(四)

1、点云配准 1&#xff09;概述 在计算机逆向工程中&#xff0c;通过三维扫描等实物数字化技术可以获取各种点云数据。但是受测量环境和设备的影响&#xff0c;在一次测量的情况下&#xff0c;难以获取实物整体的点云数据&#xff0c;因此需要多次从不同角度进行测量。但不同的…

面试基础--Spring Boot启动流程及源码实现

深度解析Spring Boot启动流程及源码实现 一、Spring Boot启动全景图&#xff08;含核心阶段&#xff09; #mermaid-svg-dYTQ6WPa3o6vKFHh {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-dYTQ6WPa3o6vKFHh .error-i…

http status是什么?常见的http状态码指的是什么意思?

HTTP 状态码 HTTP 状态码&#xff08;HTTP Status Code&#xff09;是服务器在响应客户端请求时返回的一个三位数字代码&#xff0c;用于表示请求的处理结果。HTTP 状态码是 HTTP 协议的一部分&#xff0c;帮助客户端&#xff08;如浏览器或应用程序&#xff09;了解请求是否成…

【前端】webstorm创建一个导航页面:HTML、CSS 和 JavaScript 的结合

文章目录 前言一、项目结构二、HTML 结构三、CSS 样式四、JavaScript 功能五、现代化风格优化htmlcssjavascript运行效果 总结 前言 在现代网页开发中&#xff0c;一个良好的导航栏是提升用户体验的重要组成部分。在这篇文章中&#xff0c;我将向您展示如何创建一个简单而完整…