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

相关文章

Java 字符数组转字符串的常用方法

《Java字符数组转字符串的常用方法》文章总结了在Java中将字符数组转换为字符串的几种常用方法,包括使用String构造函数、String.valueOf()方法、StringBuilder以及A... 目录1. 使用String构造函数1.1 基本转换方法1.2 注意事项2. 使用String.valu

Python Invoke自动化任务库的使用

《PythonInvoke自动化任务库的使用》Invoke是一个强大的Python库,用于编写自动化脚本,本文就来介绍一下PythonInvoke自动化任务库的使用,具有一定的参考价值,感兴趣的可以... 目录什么是 Invoke?如何安装 Invoke?Invoke 基础1. 运行测试2. 构建文档3.

VUE动态绑定class类的三种常用方式及适用场景详解

《VUE动态绑定class类的三种常用方式及适用场景详解》文章介绍了在实际开发中动态绑定class的三种常见情况及其解决方案,包括根据不同的返回值渲染不同的class样式、给模块添加基础样式以及根据设... 目录前言1.动态选择class样式(对象添加:情景一)2.动态添加一个class样式(字符串添加:情

Windows自动化Python pyautogui RPA操作实现

《Windows自动化PythonpyautoguiRPA操作实现》本文详细介绍了使用Python的pyautogui库进行Windows自动化操作的实现方法,文中通过示例代码介绍的非常详细,对大... 目录依赖包睡眠:鼠标事件:杀死进程:获取所有窗口的名称:显示窗口:根据图片找元素:输入文字:打开应用:依

Java 枚举的常用技巧汇总

《Java枚举的常用技巧汇总》在Java中,枚举类型是一种特殊的数据类型,允许定义一组固定的常量,默认情况下,toString方法返回枚举常量的名称,本文提供了一个完整的代码示例,展示了如何在Jav... 目录一、枚举的基本概念1. 什么是枚举?2. 基本枚举示例3. 枚举的优势二、枚举的高级用法1. 枚举

Jenkins中自动化部署Spring Boot项目的全过程

《Jenkins中自动化部署SpringBoot项目的全过程》:本文主要介绍如何使用Jenkins从Git仓库拉取SpringBoot项目并进行自动化部署,通过配置Jenkins任务,实现项目的... 目录准备工作启动 Jenkins配置 Jenkins创建及配置任务源码管理构建触发器构建构建后操作构建任务

IDEA常用插件之代码扫描SonarLint详解

《IDEA常用插件之代码扫描SonarLint详解》SonarLint是一款用于代码扫描的插件,可以帮助查找隐藏的bug,下载并安装插件后,右键点击项目并选择“Analyze”、“Analyzewit... 目录SonajavascriptrLint 查找隐藏的bug下载安装插件扫描代码查看结果总结Sona

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

JS常用组件收集

收集了一些平时遇到的前端比较优秀的组件,方便以后开发的时候查找!!! 函数工具: Lodash 页面固定: stickUp、jQuery.Pin 轮播: unslider、swiper 开关: switch 复选框: icheck 气泡: grumble 隐藏元素: Headroom

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象