Selenium 选择器定位元素方式详解

Selenium 选择器定位元素方式详解

在自动化测试中,定位网页元素是一个至关重要的步骤。Selenium 提供了多种选择器来帮助我们精确地找到页面上的元素。以下将详细介绍各种选择器的用法和区别,包括 ID、XPATH、LINK_TEXT、PARTIAL_LINK_TEXT、NAME、TAG_NAME、CLASS_NAME 和 CSS_SELECTOR,并提供一个具体的 HTML 示例来说明这些选择器的使用。

HTML 示例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Selenium Selectors Example</title>
</head>
<body>
    <div id="main" class="container">
        <h1 class="header">Welcome to Selenium Tutorial</h1>
        <p name="description">This is a tutorial for learning Selenium.</p>
        <a href="https://example.com" id="link1" class="link">Click here</a>
        <a href="https://example.com/about" id="link2" class="link special-link">Learn more</a>
        <form>
            <input type="text" name="username" class="input-field">
            <input type="password" name="password" class="input-field">
            <button type="submit" class="button primary">Submit</button>
        </form>
    </div>
</body>
</html>

1. ID 选择器

用法:

ID 选择器是最简单和最快的选择器。每个元素的 ID 在一个网页中都是唯一的,因此使用 ID 定位是最直接和可靠的。

示例代码:
from selenium.webdriver.common.by import By

element = driver.find_element(By.ID, 'main')
优点:
  • 唯一性:一个页面中的 ID 是唯一的。
  • 快速:浏览器在内部通过 ID 定位元素的速度最快。
缺点:
  • 依赖于开发者:如果开发者没有为元素设置 ID,则无法使用。
  • 易变性:如果开发者更改了 ID,脚本也需要相应更改。

2. XPATH 选择器

用法:

XPATH 是一种用于查找 XML 文档中元素的路径语言。它也适用于 HTML 文档。通过 XPATH,我们可以用绝对路径或相对路径来查找元素。

示例代码:

绝对路径:

element = driver.find_element(By.XPATH, '/html/body/div/div/h1')

相对路径:

element = driver.find_element(By.XPATH, '//h1[@class="header"]')

从定位到的列表元素中取出指定位置的元素

# 先通过xpath定位到元素,然后取第二条数据
element = driver.find_element(By.XPATH, '(//h1[@class="header"])[1]')
优点:
  • 强大:可以通过元素的任何属性来定位。
  • 灵活:可以使用复杂的查询语句。
缺点:
  • 复杂性:编写和理解 XPATH 可能比较困难。
  • 速度:相比 ID 和 CSS 选择器,XPATH 定位速度稍慢。

3. LINK_TEXT 选择器

用法:

LINK_TEXT 选择器用于查找链接文本完全匹配的 <a> 标签。

示例代码:
element = driver.find_element(By.LINK_TEXT, 'Click here')
优点:
  • 直观:可以通过链接的可见文本来定位。
缺点:
  • 依赖文本:如果链接文本变化,脚本需要相应更改。
  • 不适用于部分匹配:无法定位部分匹配的链接文本。

4. PARTIAL_LINK_TEXT 选择器

用法:

PARTIAL_LINK_TEXT 选择器用于查找链接文本部分匹配的 <a> 标签。

示例代码:
element = driver.find_element(By.PARTIAL_LINK_TEXT, 'Learn')
优点:
  • 灵活:可以通过部分链接文本来定位。
  • 直观:使用可见文本的一部分来定位。
缺点:
  • 易冲突:如果有多个链接包含相同的部分文本,可能会定位错误。

5. NAME 选择器

用法:

NAME 选择器通过元素的 name 属性来定位元素,通常用于表单元素。

示例代码:
element = driver.find_element(By.NAME, 'username')
优点:
  • 直观:特别适用于表单中的输入字段。
缺点:
  • 依赖开发者:需要开发者为元素设置 name 属性。
  • 唯一性:在页面上,name 属性不一定是唯一的,可能导致冲突。

6. TAG_NAME 选择器

用法:

TAG_NAME 选择器通过元素的标签名来定位元素,例如所有的 <div> 或者 <a> 标签。

示例代码:
elements = driver.find_elements(By.TAG_NAME, 'a')
优点:
  • 广泛:可以一次性选择多个相同标签的元素。
缺点:
  • 精确度低:选择所有相同标签的元素可能会选择过多的无关元素。

7. CLASS_NAME 选择器

用法:

CLASS_NAME 选择器通过元素的 class 属性来定位元素。

示例代码:
element = driver.find_element(By.CLASS_NAME, 'button')
优点:
  • 直观:通过 CSS 类名来定位元素。
缺点:
  • 唯一性:页面上可能有多个元素共享相同的类名,导致冲突。
  • 依赖于 class 属性:需要开发者为元素设置类名。

8. CSS_SELECTOR 选择器

用法:

CSS_SELECTOR 选择器是最灵活和强大的选择器之一,通过 CSS 选择器语法来定位元素。

示例代码:
element = driver.find_element(By.CSS_SELECTOR, '.button.primary')
优点:
  • 强大且灵活:可以使用复杂的选择器语法。
  • 快速:相比 XPATH 定位,CSS_SELECTOR 通常更快。
缺点:
  • 复杂性:CSS 选择器语法可能较为复杂。

选择器比较和选择

选择器类型用法示例优点缺点
ID 选择器driver.find_element(By.ID, 'main')唯一性,速度快依赖于 ID 的存在和稳定性
XPATH 选择器driver.find_element(By.XPATH, '//h1[@class="header"]')强大且灵活复杂,速度较慢
LINK_TEXT 选择器driver.find_element(By.LINK_TEXT, 'Click here')直观依赖文本,无法部分匹配
PARTIAL_LINK_TEXT 选择器driver.find_element(By.PARTIAL_LINK_TEXT, 'Learn')灵活易冲突
NAME 选择器driver.find_element(By.NAME, 'username')直观依赖于 name 属性,可能冲突
TAG_NAME 选择器driver.find_elements(By.TAG_NAME, 'a')广泛精确度低
CLASS_NAME 选择器driver.find_element(By.CLASS_NAME, 'button')直观唯一性低,依赖 class 属性
CSS_SELECTOR 选择器driver.find_element(By.CSS_SELECTOR, '.button.primary')强大且灵活,速度快语法复杂

总结

在选择使用哪种选择器时,需要考虑具体的场景和需求:

  • ID 选择器:当元素有唯一的 ID 时,这是最快和最可靠的选择。
  • XPATH 选择器:当需要通过复杂条件定位元素时,这是最强大的选择,但需要权衡复杂性和性能。
  • LINK_TEXT 和 PARTIAL_LINK_TEXT 选择器:适用于链接定位,依赖于可见文本。
  • NAME 选择器:特别适用于表单中的输入字段,但需要注意唯一性。
  • TAG_NAME 选择器:适用于查找所有相同标签的元素,但精确度低。
  • CLASS_NAME 选择器:通过类名定位元素,适用于样式统一的元素。
  • CSS_SELECTOR 选择器:灵活且强大,是高级用户的常用选择。

通过合理选择和结合这些选择器,可以在 Selenium 中高效准确地定位页面元素,提高自动化测试的稳定性和可靠性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/753199.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

太速科技-FMC144 -八路 250MSPS 14bit AD FMC子卡

FMC144 -八路 250MSPS 14bit AD FMC子卡 一、板卡概述   FMC144是一款具有8通道模数转换器&#xff08;ADC&#xff09;的FMC卡&#xff0c;具有14bit分辨率&#xff0c;最大采样速率达250Msps。时钟配置芯片为AD9516-1&#xff0c;可由板载10MHz时钟提供参考&#xff0c;也可…

[游戏开发][UE5]引擎学习记录

C Log和蓝图Log C Log 方法 UE_Log(参数1&#xff0c;参数2&#xff0c;参数3) //举例: UE_LOG(LogTemp, Error, TEXT("Log Info: %s"),"Test Log"); 三个参数的作用 参数1&#xff1a;输出窗口归类使用&#xff0c;你写什么它就显示什么 参数2&#x…

node.js安装

下载地址 https://nodejs.org/en/download 安装教程

Stable Diffusion初体验——提示词指南

前言 Stable Diffusion是一种深度学习模型&#xff0c;它能够根据提示词生成高质量的图像。在Stable Diffusion模型中&#xff0c;提示词起着至关重要的作用&#xff0c;因为它们为模型提供了关于所需输出的指导。本文将探讨Stable Diffusion关于提示词的原理&#xff0c;包括…

k8s集群node节点加入失败

出现这种情况&#xff1a; [preflight] FYI: You can look at this config file with kubectl -n kube-system get cm kubeadm-config -o yaml [kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml" [kubelet-start] Writing kub…

计算机网络——数据链路层(数据链路层概述及基本问题)

链路、数据链路和帧的概念 数据链路层在物理层提供服务的基础上向网络层提供服务&#xff0c;其主要作用是加强物理层传输原始比特流的功能&#xff0c;将物理层提供的可能出错的物理连接改造为逻辑上无差错的数据链路&#xff0c;使之对网络层表现为一条无差错的链路。 链路(…

sheng的学习笔记-AI-K均值算法

ai目录&#xff1a;sheng的学习笔记-AI目录-CSDN博客 需要学习前置知识&#xff1a;聚类&#xff0c;可参考 sheng的学习笔记-聚类(Clustering)-CSDN博客 目录 什么是k均值算法 流程 伪代码 数据集 伪代码 代码解释 划分示意图 优化目标 随机初始化 选择聚类数…

酣客的“FFC模式”|白酒商业模式|分润制度顶层架构设计

酣客公社摒弃传统商业模式&#xff0c;提出“心联网”及“FFC模式”的商业模式。 坐标&#xff1a;厦门&#xff0c;我是肖琳 深耕社交新零售行业10年&#xff0c;主要提供新零售系统工具及顶层商业模式设计、全案策划运营陪跑等。 今天和大家分享“酣客”的营销模式&#xff…

Parallels Toolbox for mac(pd工具箱) 6.0.2激活版

Parallels Toolbox 是由 Parallels 公司开发的一款实用工具集合软件&#xff0c;它主要面向使用 Parallels Desktop 的用户&#xff0c;提供了许多方便用户在 macOS 和 Windows 之间进行切换和管理的工具。Parallels Desktop 是一款流行的虚拟化软件&#xff0c;允许用户在 mac…

【24医学顶刊】GANDALF:主动学习 + 图注意力变换器 + 变分自编码器,改善多标签图像分类

GANDALF&#xff1a;主动学习 图注意力变换器 变分自编码器&#xff0c;改善多标签图像分类 提出背景子解法1&#xff1a;多标签信息样本的选择子解法2&#xff1a;生成信息丰富且非冗余的合成样本 例子&#xff1a;胸部X射线图像分析传统方法的操作和局限GaNDLF方法的优势 工…

理解ABP的领域驱动设计

大家好&#xff0c;我是张飞洪&#xff0c;感谢您的阅读&#xff0c;我会不定期和你分享学习心得&#xff0c;希望我的文章能成为你成长路上的垫脚石&#xff0c;让我们一起精进。 关于玩转ABP框架相关的文章&#xff0c;之前在博客园陆续写了《ABP vNext系列文章和视频》&…

电路仿真王者之争:SmartEDA如何领跑业界,打破传统仿真软件格局?

在电子设计领域&#xff0c;电路仿真软件一直扮演着至关重要的角色。它们为工程师们提供了一个虚拟的实验室&#xff0c;可以在不耗费大量实际资源的情况下&#xff0c;进行电路设计、优化和测试。在众多电路仿真软件中&#xff0c;SmartEDA以其独特的优势&#xff0c;逐渐崭露…

嵌入式开发十九:SysTick—系统定时器

在前面实验中我们使用到的延时都是通过SysTick进行延时的。 我们知道&#xff0c;延时有两种方式&#xff1a;软件延时&#xff0c;即CPU 循环等待产生的&#xff0c;这个延时是不精确的。第二种就是滴答定时器延时&#xff0c;本篇博客就来介绍 STM32F4 内部 SysTick 系统定时…

浅谈API生态建设:API安全策略的6项原则

API作为连接系统与应用的桥梁&#xff0c;在助力实现高效业务流程的同时&#xff0c;也不可避免出现资产管理困难、敏感数据泄漏风险骤增等安全问题。前段时间&#xff0c;安全公司Fastly公布了一项重磅调查报告&#xff0c;报告中显示95%的企业在过去1年中遭遇过API安全问题。…

AXI接口简介

AXI接口&#xff0c;全称为Advanced eXtensible Interface&#xff0c;是ARM公司推出的一种高性能、低成本、可扩展的高速总线接口。AXI接口是ARM公司提出的AMBA&#xff08;Advanced Microcontroller Bus Architecture&#xff09;高级微控制器总线架构的一部分。2003年发布了…

简易电阻、电容和电感测量仪-FPGA

通过VHDL语言编写程序用于设计电阻、电容和电感测量仪&#xff0c;通过使用试验箱进行验证是否设计正确&#xff0c;资料获取到咸&#x1f41f;&#xff1a;xy591215295250 \\\或者联系wechat 号&#xff1a;comprehensivable 设计并制作--台数字显示的电阻、电容和电感参数测试…

07-border布局的另一个用处

07-border布局的另一个用处 实现如下的布局: 分析: 1.USERNAME和PASSWORD使用form 2.PASSWORD的文本框使用NewMultiLineEntry 布局1 USERNAME和PASSWORD作为一个form整体&#xff0c;使用border布局&#xff0c;form设置为top&#xff0c;文本框设置为center参数。 packa…

Postman 接口测试 安装使用教程

1 下载官网:https://www.postman.com/downloads/ 2 方便下载,特提供百度云网盘: 链接&#xff1a;Postman 3 windows10 安装&#xff0c;点击安装包 #自动安装&#xff0c;并打开 4 举例&#xff0c;比如豆瓣&#xff0c;get 查询时间&#xff0c;图片登 5 举例&#xff0…

HSRP热备份路由协议(VRRP虚拟路由冗余协议)配置以及实现负载均衡

1、相关原理 在网络中&#xff0c;如果一台作为默认网关的三层交换机或者路由器损坏&#xff0c;所有使用该网关为下一跳的主机通信必然中断&#xff0c;即使配置多个默认网关&#xff0c;在不重启终端的情况下&#xff0c;也不能彻底换到新网关。Cisco提出了HSRP热备份路由协…

传神论文中心|第14期人工智能领域论文推荐

在人工智能领域的快速发展中&#xff0c;我们不断看到令人振奋的技术进步和创新。近期&#xff0c;开放传神&#xff08;OpenCSG&#xff09;社区发现了一些值得关注的成就。传神社区本周也为对AI和大模型感兴趣的读者们提供了一些值得一读的研究工作的简要概述以及它们各自的论…