Selenium 自动化 —— 常用的定位器(Locator)

问题解决:selenium中定位元素后使用location获取坐标值出现偏差 本文用多种方式解决selenium中定位元素后使用location获取坐标值出现偏差的问题,如果能帮助到你i的话,请不要吝啬你的赞喔~ 阅读详情

什么是定位器

定位器(Locator)是识别DOM中一个或多个特定元素的方法。

也可以叫选择器

在这里插入图片描述

Selenium 通过By类,提供了常见的定位器。具体语法如下:

By.xxx("");

我们选择单个元素时可以使用findByElement:

WebElement ele = driver.findByElement(By.id("username"));

如果匹配的有多个,Selenium会返回第一个
如果一个都没有匹配到,Selenium会抛出异常

如果有多个,或者我们不想抛出异常,我们可以使用findByElements:

List<WebElement> eleList = driver.findByElements(By.id("username"));

八种场景的选择器

对于网页DOM,我们一般可以通过id、name、class等来定位一个元素。Selenium就内置了这些常用的选择器,下面我们介绍这八种常见的选择器。

class 定位

我们可以选择特定class的元素:

<div class="time">14:15</div>

我们通过By.className 选择:

driver.findElement(By.className("time"));

但是特别注意,class是样式,网站的样式可能随时会变,会导致定位失效!

css 选择器

我们在学习html和css时候,也了解过css选择器,Selenium同样支持这种选择器。
比如,对于下面的元素:

<input aria-label="可输入城市或机场" name="owDCity" 
	type="text" class="form-input-v3" placeholder="可输入城市或机场" 
	autocomplete="off" u_key="poi_input" 
	u_remark="点击POI输入框[owDCity]" value="广州(CAN)">

使用css选择器,我们可以使用:

driver.findElement(By.cssSelector("input[name='owACity']"));

后面会介绍到xpath非常强大,但是css选择器同样强大,而且语法也很简洁!

id 定位

元素的id应该是唯一的,所以可以直接通过它定位。

<a href="javascript:void(0)" data-ubt-key="PC_head_search_click" 
	assist-speak-text="true" assist-speak-text-pspeak="true" 
	title="搜索" id="search_button_global" 
	class="pc_home-search  tl_search_icon_N-uay"></a>

可以直接通过id定位:

driver.findElement(By.id("search_button_global"));
name 定位

对于表单,一般会有name:

<input aria-label="可输入城市或机场" name="owDCity" 
	type="text" class="form-input-v3" placeholder="可输入城市或机场" 
	autocomplete="off" u_key="poi_input" 
	u_remark="点击POI输入框[owDCity]" value="广州(CAN)">

我们也可以通过name定位:

driver.findElement(By.name("owDCity"));
链接文本

对于一些超链接文本,我们可以定位

<a id="logo_mfe_top_nfes" data-ubt-key="PC_head_logo_click" 
	title="携程旅行网" href="//www.ctrip.com" assist-speak-text="true" 
	assist-speak-text-pspeak="true">携程旅行网 </a>

我们可以通过文本匹配:

driver.findElement(By.linkText("携程旅行网 "));
链接文本部分匹配

上面的链接文本是全匹配,我们也可以模糊匹配
还是原来的超链接

<a id="logo_mfe_top_nfes" data-ubt-key="PC_head_logo_click" 
	title="携程旅行网" href="//www.ctrip.com" assist-speak-text="true" 
	assist-speak-text-pspeak="true">携程旅行网 </a>

可以模糊匹配

driver.findElement(By.partialLinkText("携程"));
标签名定位

通过标签名也是可以匹配的

<a class="tl_search_bar_wrap_-c5cq">搜索</a>

比如我们可以通过这个找到所有的链接

driver.findElements(By.tagName("a"));
xpath 定位

这个是最实用,也是最强大的定位器!

<div class="depart-box">
  <div class="time">14:15</div>
  <div class="airport">
      <span id="departureFlightTrainNH924_1717740900000-0" class="">白云国际机场    </span>
      <span class="terminal highlight" id="departureTerminalNH924_1717740900000-0">T1</span>
   </div>
</div>

使用xpath

driver.findElement(By.xpath("//*[@id="departureFlightTrainNH924_1717740900000-0"]"));

xpath非常强大,但是语法也是非常复杂。(关注postnull的博客,下一篇带你一篇文章彻底学懂xpath)

相对定位

除了上面介绍的八种定位器,Selenium还提供了相对定位器。

Selenium的Relative Locators是Selenium 4引入的一种新型元素定位方法,它提供了一种根据元素之间的相对位置来定位页面元素的策略。

在传统的定位方法中(如ID, Class Name, XPath, CSS Selectors等),我们通常直接根据元素的属性来定位,但这在元素属性频繁变动或难以直接通过属性唯一确定时会遇到困难。

Relative Locators的出现正是为了解决这类问题,它允许开发者通过元素之间的空间关系(如上下左右相邻)来定位目标元素,而不是依赖于元素的具体属性。

  1. above(): 用于定位位于某个参考元素上方的元素。
  2. below(): 用于定位位于某个参考元素下方的元素。
  3. to_left_of(): 用于定位位于某个参考元素左侧的元素。
  4. to_right_of(): 用于定位位于某个参考元素右侧的元素。
  5. near(): 用于定位距离某个参考元素最近的元素,可以指定一个最大距离。

具体语法:

By submitLocator = RelativeLocator.with(By.tagName("button"))
                            .below(By.id("email"))
                            .toRightOf(By.id("cancel"));
Selenium 4 Relative Locators 相对定位器方法的封装 对 Relative Locators 相对定位器方法的二次封装,实现关键字驱动 阅读详情

相关推荐

selenium中元素的定位方式

Selenium是一个用于自动化Web应用程序测试的工具,它支持多种编程语言,如Java、Python、C#等。在Selenium中,元素的定位方式是指如何通过代码找到Web页面上的特定元素,以便进行后续的操作或验证。

hah57的博客 2549

Selenium--使用find_element(‘locator‘,‘value‘)定位元素

我们可以通过find_element关键字来定位元素,把用到的locator和value以参数的方式传递进去。传递locator和value的方式有两种:一种是直接传递,另一种是先引入By的包,然后借助By来传递。

weixin_43502967的博客 1081

Playwright vs Selenium:现代浏览器自动化工具的核心优势与实战指南

浏览器自动化是现代软件开发和测试中的关键技术,它通过模拟用户操作实现自动化测试、数据抓取和流程自动化。其核心原理在于通过协议与浏览器内核通信,控制页面元素与行为。相较于传统的基于W3C WebDriver协议的方案,新一代工具采用了更高效的通信架构,直接与浏览器开发者工具协议交互,从而在速度和稳定性上实现了显著提升。这种技术革新为处理复杂单页应用(SPA)和需要高保真模拟的场景带来了巨大价值,广泛应用于前端测试、爬虫开发和RPA等领域。本文聚焦的Playwright正是这一趋势的代表,它通过内置智能等待、浏

weixin_33922672的博客 368

如何在Selenium IDE中使用Locators

  什么是定位器? Locator是一个命令,告诉Selenium IDE需要操作哪些GUI元素(比如文本框,按钮,复选框等)。识别正确的GUI元素是创建自动化脚本的先决条件。但是,准确识别GUI元素比听起来更困难。有时,您最终会使用不正确的GUI元素或根本没有元素!因此,Selenium提供了许多定位器来精确定位GUI元素   Selenium IDE中不同类型的定位器  ID  名...

拿Q 1710

Selenium 4自动化测试环境搭建与大厂面试实战指南

自动化测试是现代软件工程中保障质量与效率的关键技术,其核心原理是通过脚本模拟用户操作,实现重复性测试任务的自动化执行。这项技术的价值在于提升测试覆盖率、加快反馈速度并降低人力成本,广泛应用于Web应用、移动端及API的回归测试与持续集成场景。本文聚焦于Python生态下的Selenium 4,深入解析其环境配置与实战应用。针对环境搭建,文章详细介绍了如何通过虚拟环境管理依赖、使用webdriver-manager自动匹配浏览器驱动,确保环境的可复现性与稳定性。在面试实战方面,结合大厂高频考点,探讨了相对定位

weixin_33937913的博客 648

AutoSAR实战:手把手教你配置PNC(Partial Network Cluster)实现精准休眠与唤醒

本文详细介绍了如何在AutoSAR中配置PNC(Partial Network Cluster)实现精准休眠与唤醒,通过DaVinci Configurator工具逐步指导,结合ComM模块的协同调试,优化车载电子系统的能耗管理。文章包含实战步骤、常见错误排查及功耗优化数据,适合汽车电子开发工程师参考。

weixin_33725239的博客 465

【python爬虫与自动化】selenium 元素定位器

本文介绍了Selenium自动化测试中的元素定位器(Locator)机制。重点讲解了三种主要定位方式:By.ID(最快速)、By.XPATH(支持复杂路径和属性匹配)和By.CSS_SELECTOR(语法简洁)。详细说明了XPath的绝对/相对路径、通配符、属性匹配和多条件组合等高级用法,以及CSS选择器的类选择、属性匹配和层级关系等特性。文章强调相对路径和稳定属性在动态页面中的重要性,为Web自动化测试提供了实用的元素定位策略指南。

2301_81084742的博客 866

深入解析Apollo Lattice Planner:自动驾驶轨迹规划的核心算法与实践

本文深入解析了百度Apollo自动驾驶平台中的核心轨迹规划算法——Lattice Planner。文章详细阐述了其作为车辆“即时决策者”的工作原理,通过“采样-评估”的六步流程(Frenet坐标转换、状态采样、轨迹生成、硬约束过滤、代价函数打分及决策平滑),在复杂路况下实时规划出安全、舒适、高效的行驶轨迹。该算法是自动驾驶实现智能决策与精准控制的关键技术。

weixin_29090677的博客 829

测试工程师狂喜!这款工具让4大自动化框架定位器一键生成,直接起飞

就像测试工程师的"定位神器",把繁琐的定位工作变得高效又简单。四大框架全覆盖、智能评级、实时验证、永久免费,这些优点足以让它成为自动化测试的必备工具。如果你还在为定位器头疼,赶紧去官网下载试试,相信我,用了就再也回不去了!📌 官网地址:https://www.locator-labs.com💬 留言互动:你在自动化测试中遇到过哪些定位难题?欢迎在评论区分享,一起交流解决方案~

测试工程师成长之路 1341

指标异常检测和诊断

贡献度,即用定量衡量的方式来说明:一个指标YYY的异动△Y△Y△Y,具体是由其中哪些成分XiX_iXi​带来了多少异动△Yi△Y_i△Yi​?

qq_43349542的博客 3163

使用 CFD 仿真进行阀门性能分析:第一部分

了解如何使用 Ansys Discovery 评估阀门性能,使工程师能够设计出更好的产品。

jkh920184196的博客 3142

Protractor 元素定位完整指南:Locator、ElementFinder 与 Actions 实战

在 Protractor 的端到端测试中,几乎所有断言与交互都始于"找到正确的 DOM 元素"。本文以官方文档 [docs/locators.md](https://link.gitcode.com/i/dd934e3323efcf4b853571059bdc5aa0) 为骨架,系统讲解 Protractor 的定位体系:全局 `element` / `element.all` 函数、`by` 对

gitblog_00422的博客 241

python后端的支付宝小程序用户认证问题(alipay-sdk-python、pycrypto无法安装)

python后端的支付宝小程序用户认证问题(alipay-sdk-python、pycrypto无法安装) 写在前面 事先说明,本人不是大佬,我只是在不断探索的途中找到了解决这个问题的方法,之前在网上搜索的时候没有看到相关文章,所以就来简单讲一下。 正文 借着蚂蚁金服小程序大赛开通了支付宝小程序个人开发者,尝试将一个微信小程序的项目移植到支付宝上,支付宝对于用户唯一id的获取比微信要复杂很多,微信...

weixin_43102379的博客 3642

Selenium Java教程– Selenium中的类名定位器

Selenium中CSS Locator是编写脚本的最重要方面之一。 如果您无法通过使用Selenium中的任何CSS定位器来定位元素,那么精通Selenium自动化将是一项艰巨的任务。 Selenium提供多种定位元素的方法。 您可以查看有关Selenium中不同CSS定位器的其他文章,这些文章可通过多种方式帮助您定位元素: Selenium中的链接文本和部分链接文本 Seleniu...

cunfen0516的博客 463

一文让你轻松理解802.11ax RU的概念

RU

1042484520@qq.com(邮箱) 3363

ROS2入门到精通—— 2-9 ROS2实战:Nav2常见的工程问题(参考3D视觉工坊)

本文介绍了Nav2常见的工程问题,还有调试DWB的一些经验,以及DWB的一些缺点

BigDavid123的博客 1067

【日常学习】10-14 Locator类

_init__是Locator# 方式1:直接传 by(定位方式)和 value(定位路径)else:# 方式2:传 location 字符串(如 "xpath=//button[text()='确定']")# 解析 location 字符串,拆分定位方式和路径loc_type = location.split('=', 1)[0].strip() # 提取定位方式(如 "xpath")self.__by = by_Dict[loc_type] # 映射为框架/底层工具的 By 类型。

2401_83117850的博客 759

鸿宇多用户商城user.php RCE漏洞复现

鸿宇多用户商城 user.php 存在任意命令执行漏洞,攻击者可通过该漏洞在服务器端任意执行代码,写入后门,获取服务器权限,进而控制整个web服务器。

0xSec 1621

Locator Labs完全指南:四大自动化测试工具一站式实践平台

Locator Labs 是一款革命性的浏览器扩展工具,它将四大主流自动化测试框架——Playwright、Selenium、Cypress 和 WebDriverIO——整合到同一个界面中。我们再也不用为定位、调试元素发愁,并且代码一键复制。这款工具的出现改变了自动化测试学习和实践的方式,为测试工程师、学习者和项目开发者提供了前所未有的便利...更多内容请参见公众号!

测试者家园 1579

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

从Selenium到Playwright:WEB自动化框架核心解析与实战指南

在WEB自动化测试领域,Selenium曾是不可或缺的工具,但其浏览器驱动版本匹配、显式等待依赖等问题长期困扰开发者。Playwright作为新一代自动化框架,通过CDP协议直连浏览器,内置自动等待、语义化定位器,并原生支持iframe和多页面处理,显著提升了脚本稳定性与编写效率。无论是UI测试、数据采集还是爬虫开发,Playwright都能以更低的维护成本实现复杂场景。本文从自动化测试的基本概念与原理出发,对比Selenium与Playwright在驱动程序、定位方式、网络拦截等方面的差异,并深入探讨浏览

weixin_33981932的博客 314

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

偷窥Selenium4 0带有网芯的相对定位器3 1

Selenium 4 is launching “soon”. The most exciting news: Selenium will be W3C standardized.Selenium4即将“发射”。 最令人振奋的消息是:Selenium将被W3C标准化。 Browsers, such as Chrome, Firefox, Safari are all following W3C s...

weixin_26711867的博客 345

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Selenium IDE使用指南七(参数定义)

alertText 名称:alertText 描述:要检查的文字 answer 名称:answer 描述:响应弹出提示而给出的答案。 attributeLocator 名称:attributeLocator 描述:元素定位符,后跟一个@符号,然后是属性名称,例如“ foo @ bar”。 arrayVariableName 名称:arrayVariableName 描述:包含JavaScript数组的变量的名称。 conditionalExpression 名称:conditionalExpress

novelly的专栏 2021

AI驱动自动化脚本维护:动态定位器失效的智能修复方案

在Web自动化测试与RPA(机器人流程自动化)领域,动态定位器失效是导致脚本脆弱和维护成本高昂的核心挑战。其根源在于现代单页应用(SPA)普遍采用React、Vue等前端框架,通过数据驱动渲染和虚拟DOM技术动态生成页面元素,使得元素的ID、Class等传统定位属性频繁变化。为解决此问题,业界正探索引入人工智能技术,特别是计算机视觉(CV)与自然语言处理(NLP),赋予脚本自适应能力。CV技术通过特征匹配与OCR识别,使脚本能像人眼一样“看到”并定位UI元素;NLP技术则通过理解元素的语义角色与上下文,实现

weixin_33726313的博客 420

关于Selenium里如何设计Locator

原文地址:http://blog.mozilla.org/webqa/2013/09/26/writing-reliable-locators-for-selenium-and-webdriver-tests/ If you’ve come here looking for the perfect, unbreakable locator, then I’m afraid to tell y

Ant Ren的专栏 3983

ZCode Browser Use 浏览器交互故障排查指南:错误分类、陈旧绑定恢复与定位器重建协议

在 ZCode 的 Browser Use 插件(`apps/zcode-cli/packages/browser-use-plugin`)中,Agent 通过 `mcp__node_repl__js` 工具驱动浏览器完成网页自动化。由于每次 JS 调用都在全新的 JavaScript 内核中执行,标签页超时、定位器失败、弹窗未生效等交互故障并不等于浏览器断开。本文以插件内置的 `docs/bro

gitblog_00467的博客 718

Playwright实战指南:从Selenium迁移到CI集成的自动化测试实践

Web UI自动化测试是保障前端质量的关键手段,而框架选型直接影响脚本的稳定性与维护成本。传统方案基于WebDriver协议,需手动管理驱动版本与显式等待,在多标签页、iframe和网络拦截等场景下操作繁琐。新一代工具以事件驱动和自动等待为核心,内置浏览器管理,通过locator语义化定位元素,并在底层封装了页面交互、并发隔离与调试能力。这种设计大幅减少了sleep与繁琐的等待逻辑,使测试代码更接近用户真实行为。在实际工程中,无论是环境搭建、录制回放、接口mock,还是接入pytest与CI流水线,它都提供

weixin_33898876的博客 464
上一篇: 学透Spring Boot — 006. 一篇文章彻底搞懂 Spring Boot 的自动配置
下一篇: Selenium 自动化 —— 一篇文章彻底搞懂XPath
postnull咖啡
博客等级 码龄10年 1026粉丝 59原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值