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

CSS选择器进行定位

  CSS选择器可以说是我们最常用也是最重要的一种元素定位方式,他可以通过元素的标签,ID,class等属性进行定位,在Selenium中通过By.CSS_SELECTOR,进行元素定位也就是:

driver.find_elements(By.CSS_SELECTOR,"")

  通过这种方式就可以获取到我们想要获取的元素,这里并不是一定要使用elements也可以是element只要是根据你要获取元素的数量决定。

  它可以替代通过id等属性进行定位元素,接下来我们通过一些案例进行讲述,假设我们要获取div标签下的所有内容:

elements = driver.find_elements(By.CSS_SELECTOR,"div")
for element in elements:print(element.get_attribute("outerHTML"))

  这样运行的结果为:

 

  当然如果我们相通过div的id属性来确定元素位置,我们可以直接使用id进行定位(通常情况下我们认为id是唯一的):

elements = driver.find_elements(By.CSS_SELECTOR,"#t1")
for element in elements:print(element.get_attribute("outerHTML"))

  通过这个我们会发现我们在CSS选择器时使用id进行定位,与单纯的使用By.ID的写法有所不同,我们需要再id前面加上“#”来声明它是个id,class也是一样,“.class名”通过这种方式可以通过classname进行元素的定位:

选择 子元素 和 后代元素:

  这是CSS选择器的一个非常重要的方式来进行元素的定位:

<div id='container'><div id='layer1'><div id='inner11'><span>内层11</span></div><div id='inner12'><span>内层12</span></div></div><div id='layer2'><div id='inner21'><span>内层21</span></div></div></div>

  以这段html为例,这个id为container是id为layer1和layer2的父元素,同理inner11是layer1的子元素,但是这两个id都为container的后代元素,而layer1和layer2为container的直接子元素(这一点我们后续要用到),inner11是layer1的直接子元素。

  如果我们想要通过这种方式确定元素的位置需要遵守一定的规则如果是直接子元素需要使用“>”进行指定比如“#container > #layer1”,如果通过后代元素来确定位置,使用空格“ ”,例如“#container inner11”表示inner11为container的后代(无论隔了多少代,总之表示它的后代),接下来我们通过一些用例来检验我们的说明是否正确:

elements = driver.find_elements(By.CSS_SELECTOR,"#container > #layer1")
for element in elements:print(element.get_attribute("outerHTML"))

  结果为:

 

   如果使用空格后代元素,来确定元素的位置:

elements = driver.find_elements(By.CSS_SELECTOR,"#container  #inner11")
for element in elements:print(element.get_attribute("outerHTML"))

  结果为:

 

  

   

http://www.xdnf.cn/news/15177.html

相关文章:

  • 医疗AI前端开发中的常见问题分析和解决方法
  • 计算机视觉与深度学习 | 基于Matlab的多特征融合可视化指纹识别系统(附完整代码)
  • 电脑上如何查看WiFi密码
  • [BUUCTF 2018]Online Tool
  • tp8.0\jwt接口安全验证
  • 什么是 Bootloader?怎么把它移植到 STM32 上?
  • 《人件》第六章 快乐地工作
  • Python-难点-uinttest
  • 秋招笔试考什么?如何针对性去练习?
  • w459客户管理系统
  • xml映射文件的方式操作mybatis
  • 多线程进阶——JUC的常见类
  • 跨系统开发代码换行符如何解决
  • docker-compose方式搭建lnmp环境——筑梦之路
  • 2025 XYD Summer Camp 7.10 筛法
  • Go语言生态成熟度分析:为何Go还无法像Java那样实现注解式框架?
  • 系统分析师-计算机系统-计算机系统概述存储系统
  • 《Java Web程序设计》实验报告二 学习使用HTML标签、表格、表单
  • 【学习笔记】Linux命令
  • 蓝牙BT UUID的含义以及使用方法案例说明
  • JavaScript加强篇——第七章 浏览器对象与存储要点
  • 《Java Web程序设计》实验报告四 Java Script前端应用和表单验证
  • OpenCL study - code02
  • docker网络与数据持久化
  • 大数据时代UI前端的智能化服务升级:基于用户情境的主动服务设计
  • Elasticsearch 的 `modules` 目录
  • 使用Matlab整车模型进行电动汽车能耗仿真测试方法
  • 【飞算JavaAI】一站式智能开发,驱动Java开发全流程革新
  • 鸿蒙的NDK开发初级入门篇
  • Apache Iceberg数据湖高级特性及性能调优