首页 > 编程语言 >软件测试/测试开发|Python selenium CSS定位方法详解

软件测试/测试开发|Python selenium CSS定位方法详解

时间:2023-12-26 18:34:52浏览次数:37  
标签:webdriver Python selenium 元素 driver element 属性 选择器 软件测试

简介

CSS选择器是一种用于选择HTML元素的模式。它允许我们根据元素的标签名、类名、ID、属性等属性进行选择。CSS选择器的语法简单而灵活,是前端开发中常用的定位元素的方式。

selenium中的css定位,实际是通过css选择器来定位到具体元素,css选择器来自于css语法。CSS定位有以下显著优点:

  1. 语法简洁
  2. 对比其他定位方式,定位效率更快
  3. 对比其他定位方式,定位更稳定

css选择器语法

基础选择器

选择器 格式 示例 示例说明
选择全部 * * 选择全部元素
标签选择器 html标签 p 选择所有<p>元素
ID选择器 #id属性值 #su 选择所有id='su'的元素
类选择器 .class属性值 .s_btn 选择所有class='s_btn'的元素
属性选择器1 [属性名] [type] 选择所有带type属性的元素
属性选择器2 [属性名='属性值'] [type="submit"] 选择所有type="submit"的元素
属性选择器3 [属性名~='属性值'] [type~="submit"] 选择所有type包含"submit"的元素
属性选择器4 [属性名|='属性值'] [type|="submit"] 选择所有type以"submit"开头的元素

备注:某些元素属性有多个值(如class属性),值表现为以空格隔开,使用时需要单个取出使用

组合选择器

组合选择器就是同时使用多个基础选择器,从而更好地筛选出目标元素

选择器 格式 示例 示例说明
标签指定属性 标签加属性描述 input#su 选择所有id='su'的<input>元素
并集 元素1,元素2 div,p 选择所有<div>和<p>元素
父子 元素1>元素2 div>p 选择所有父级是<div>的<p>元素
后代 元素1 元素2 div p 选择<div>中的所有<p>元素
相邻 元素1+元素2 div+p 选择<div>同级后的相邻<p>元素
同级 元素1~元素2 div~p 选择<div>同级后的所有<p>元素

伪属性选择器

伪属性选择器是指元素在html中实际并不存在该属性,是由css定义的拓展描述属性

选择器 格式 示例 示例说明
唯一子元素 :only-child p:only-child 选择所有<p>元素且该元素是其父级的唯一一个元素
第一子元素 :first-child p:first-child 选择所有<p>元素且该元素是其父级的第一个元素
最后子元素 :last-child p:last-child 选择所有<p>元素且该元素是其父级的最后一个子元素
顺序选择器 :nth-child(n) p:nth-child(2) 选择所有<p>元素且该元素是其父级的第二个子元素
顺序类型选择器 :nth-of-type(n) p:nth-of-type(2) 选择所有<p>元素且该元素是其父级的第二个<p>元素
倒序选择器 :nth-last-child(n) p:nth-last-child(2) 选择所有<p>元素且该元素是其父级的倒数第二个子元素
倒序类型选择器 :nth-last-of-type(n) p:nth-last-of-type(2) 选择所有<p>元素且该元素是其父级的倒数第二个<p>元素

使用示例

  1. 通过id选择器查找

通过css定位的id属性查找百度首页的输入框元素,代码如下:

from selenium import webdriver
from selenium.webdriver.common.by import By


 
driver = webdriver.Chrome()
driver.get("https://www.baidu.com") #打开网页
driver.maximize_window()
 
element = driver.find_element(By.CSS_SELECTOR, '#kw')
print(element)
  1. 通过class选择器查找

通过元素的.class属性值查找元素,我们还是以百度首页的输入框为例,代码如下:

from selenium import webdriver
from selenium.webdriver.common.by import By


 
driver = webdriver.Chrome()
driver.get("https://www.baidu.com") #打开网页
driver.maximize_window()
 
element = driver.find_element(By.CSS_SELECTOR, '.s_ipt')
print(element)
  1. 通过标签定位

我们继续使用百度首页输入框为例,输入框一般有input标签,代码如下:

from selenium import webdriver
from selenium.webdriver.common.by import By


 
driver = webdriver.Chrome()
driver.get("https://www.baidu.com") #打开网页
driver.maximize_window()
 
element = driver.find_element(By.CSS_SELECTOR, 'input')
print(element)
  1. 层级选择器

根据元素的父子关系来选择,实例:直接子元素层级关系,使用>号,继续以百度首页的搜索框为例,代码如下:

from selenium import webdriver
from selenium.webdriver.common.by import By


 
driver = webdriver.Chrome()
driver.get("https://www.baidu.com") #打开网页
driver.maximize_window()
 
element = driver.find_element(By.CSS_SELECTOR, '.bg.s_ipt_wr > input')
print(element)

注:如果两个元素之间不是直接的子元素关系,我们需要使用空格隔开,当有多级的层级关系时,我们可以使用duoge>符号,示例如下:

from selenium import webdriver
from selenium.webdriver.common.by import By


 
driver = webdriver.Chrome()
driver.get("https://www.baidu.com") #打开网页
driver.maximize_window()
 
element = driver.find_element(By.CSS_SELECTOR, 'form input')
print(element)

------------------------------------

from selenium import webdriver
from selenium.webdriver.common.by import By


 
driver = webdriver.Chrome()
driver.get("https://www.baidu.com") #打开网页
driver.maximize_window()
 
element = driver.find_element(By.CSS_SELECTOR, 'form > span > input')
print(element)

总结

CSS定位是非常高效的一种定位方式,代码也非常简洁,相对于xpath定位方法来说,它的定位速度快,在能够使用CSS定位的情况下,推荐使用CSS定位来实现元素的定位。希望本文能够帮到大家!

获取更多技术资料,请点击!

标签:webdriver,Python,selenium,元素,driver,element,属性,选择器,软件测试
From: https://www.cnblogs.com/hogwarts/p/17929013.html

相关文章

  • 软件测试/测试开发|如何解决pip下载速度慢的问题
    前言我们在使用pip安装Python第三方库时,默认是使用pip的官方镜像源https://pypi.org/下载的,但是有时候,我们下载的库比较大时,就会出现下载比较缓慢的问题,速度有时只有几十KB/s,非常耽误我们的时间,影响我们的工作效率,本文就来介绍一下如何解决这个问题。问题原因因为我们下载默认......
  • Python实战:从数据库到Excel的复杂查询结果处理【上】
    一、背景年底了,运营同学要做报告,于是来找我要数据,而数据来源于MySQL数据库的两个表,两个表中的数据无法一一对应,数据未能通过SQL直接查询出来,需要将表1中的查询结果传参到表2的查询SQL的条件中。数据量较大,若将查询结果复制到excel中,之后再去一一手动匹配的话,这工作量也是巨大的。于......
  • 软件测试/测试开发|Ubuntu系统常用文件管理命令详解
    前言Ubuntu是一种广泛使用的Linux操作系统,提供了丰富而强大的文件管理命令,使用户能够通过命令行轻松管理文件和目录。本文将介绍一些常用的Ubuntu文件管理命令,帮助用户更好地理解和利用系统资源。ls-列出目录内容ls[选项][目录]ls命令用于列出目录中的文件和子目录。......
  • 软件测试/测试开发|一文详解Linux grep命令
    简介grep命令是最常用的Linux命令之一,用于对文件和文本执行重复搜索的工具,功能非常强大,也是我们必须学习掌握的Linux三剑客之一,本文就给大家介绍一下grep命令的使用。grep的基本语法grep作为一款文本搜索工具,可以根据用户指定的“模式(过滤条件)”对目标文本逐行进行匹配检查,打......
  • 软件测试/测试开发|测试用例设计方法——边界值
    前言我们之前介绍了等价类测试用例设计方法,但是等价类测试用例设计方法容易存在问题,即我们取的值不一定在我们程序设计的边界附近,但是在我们的测试实践中,问题往往都是出在输入定义域或输出值域的边界上,而不是在其内部。因此,针对各种边界情况设计测试用例,通常可能会发现更多的bug......
  • 软件测试/测试开发|测试用例设计方法——等价类划分
    前言在软件测试领域,测试用例设计是确保软件系统质量的关键环节之一。等价类划分法(EquivalencePartitioning)是一种被广泛采用的测试用例设计技术,它通过将输入数据划分为相互等价的类别,以确保在每个等价类中选择适当的测试用例,从而提高测试的全面性和效率。1.了解等价类划分法......
  • 软件测试/测试开发|软件测试基础概念
    前言在我们使用各种App访问各个网站时,偶尔会出现软件崩溃,加载缓慢,或者出现报错的情况,而这两年,我们也见过了很多大厂的App出现问题,比如美团外卖,比如阿里云和微信都出现过问题,而要避免出现上述这些大的问题,就需要我们在软件上线之前尽可能的发现软件的问题,这就是我们所说的测试,即对软......
  • 软件测试/测试开发|一文告诉你什么是测试用例
    前言对于一个测试工程师来说,测试用例的编写是一项必须掌握的能力,但有效的设计和熟练的编写确实一项十分复杂的技术。不仅需要掌握软件测试技术和流程,而且还要对整个软件不管从业务,还是对软件的设计,程序模块的结构,功能规格等说明都要有透彻的理解。测试的设计方法不是单独存在的,具体......
  • 软件测试/测试开发|测试用例设计和评审应该怎么做,一篇文章告诉你?
    测试用例简介测试用例(TestCase)是为项目需求而编制的一组测试输入、执行条件以及预期结果,以便测试某个程序是否满足客户需求,可以总结为:每一个测试点的数据设计和步骤设计对需求分析找出来的每一个功能点,进行数据的设计、步骤的设计、预期的结果。测试用例的目的(为什么使用测试用例?)1......
  • 软件测试面试——项目相关的几个问题
    ......