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

2024-05-10 01:28

本文主要是介绍Selenium 自动化 —— 常用的定位器(Locator),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

什么是定位器

定位器(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 自动化 —— 常用的定位器(Locator)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


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

相关文章

Python将字符串转换为小写字母的几种常用方法

《Python将字符串转换为小写字母的几种常用方法》:本文主要介绍Python中将字符串大写字母转小写的四种方法:lower()方法简洁高效,手动ASCII转换灵活可控,str.translate... 目录一、使用内置方法 lower()(最简单)二、手动遍历 + ASCII 码转换三、使用 str.tr

Spring Boot 常用注解整理(最全收藏版)

《SpringBoot常用注解整理(最全收藏版)》本文系统整理了常用的Spring/SpringBoot注解,按照功能分类进行介绍,每个注解都会涵盖其含义、提供来源、应用场景以及代码示例,帮助开发... 目录Spring & Spring Boot 常用注解整理一、Spring Boot 核心注解二、Spr

使用Python自动化生成PPT并结合LLM生成内容的代码解析

《使用Python自动化生成PPT并结合LLM生成内容的代码解析》PowerPoint是常用的文档工具,但手动设计和排版耗时耗力,本文将展示如何通过Python自动化提取PPT样式并生成新PPT,同时... 目录核心代码解析1. 提取 PPT 样式到 jsON关键步骤:代码片段:2. 应用 JSON 样式到

Python Selenium动态渲染页面和抓取的使用指南

《PythonSelenium动态渲染页面和抓取的使用指南》在Web数据采集领域,动态渲染页面已成为现代网站的主流形式,本文将从技术原理,环境配置,核心功能系统讲解Selenium在Python动态... 目录一、Selenium技术架构解析二、环境搭建与基础配置1. 组件安装2. 驱动配置3. 基础操作模

Java中的内部类和常用类用法解读

《Java中的内部类和常用类用法解读》:本文主要介绍Java中的内部类和常用类用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录内部类和常用类内部类成员内部类静态内部类局部内部类匿名内部类常用类Object类包装类String类StringBuffer和Stri

MySQL连接池(Pool)常用方法详解

《MySQL连接池(Pool)常用方法详解》本文详细介绍了MySQL连接池的常用方法,包括创建连接池、核心方法连接对象的方法、连接池管理方法以及事务处理,同时,还提供了最佳实践和性能提示,帮助开发者构... 目录mysql 连接池 (Pool) 常用方法详解1. 创建连接池2. 核心方法2.1 pool.q

Spring Boot 常用注解详解与使用最佳实践建议

《SpringBoot常用注解详解与使用最佳实践建议》:本文主要介绍SpringBoot常用注解详解与使用最佳实践建议,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 目录一、核心启动注解1. @SpringBootApplication2. @EnableAutoConfi

SQL常用操作精华之复制表、跨库查询、删除重复数据

《SQL常用操作精华之复制表、跨库查询、删除重复数据》:本文主要介绍SQL常用操作精华之复制表、跨库查询、删除重复数据,这些SQL操作涵盖了数据库开发中最常用的技术点,包括表操作、数据查询、数据管... 目录SQL常用操作精华总结表结构与数据操作高级查询技巧SQL常用操作精华总结表结构与数据操作复制表结

JavaScript时间戳与时间的转化常用方法

《JavaScript时间戳与时间的转化常用方法》在JavaScript中,时间戳(Timestamp)通常指Unix时间戳,即从1970年1月1日00:00:00UTC到某个时间点经过的毫秒数,下面... 目录1. 获取当前时间戳2. 时间戳 → 时间对象3. 时间戳php → 格式化字符串4. 时间字符

Python中pywin32 常用窗口操作的实现

《Python中pywin32常用窗口操作的实现》本文主要介绍了Python中pywin32常用窗口操作的实现,pywin32主要的作用是供Python开发者快速调用WindowsAPI的一个... 目录获取窗口句柄获取最前端窗口句柄获取指定坐标处的窗口根据窗口的完整标题匹配获取句柄根据窗口的类别匹配获取句