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"));

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JUC下的ForkJoinPool详解

详细介绍 ForkJoinPool 是 Java 并发包 (java.util.concurrent) 中的一个特殊线程池&#xff0c;专为分治算法设计&#xff0c;能够高效地处理大量可分解的并行任务。它基于工作窃取&#xff08;work-stealing&#xff09;算法&#xff0c;当一个工作线程的任务队列为空时&…

pytest教程-43-钩子函数-pytest_report_header

领取资料&#xff0c;咨询答疑&#xff0c;请➕wei: June__Go 上一小节我们学习了pytest_runtest_makereport钩子函数的使用方法&#xff0c;本小节我们讲解一下pytest_report_header钩子函数的使用方法。 pytest_report_header 钩子函数允许你在 pytest 的终端报告的头部添…

在此计算机上找不到autocad20*你需要安装autocad20*才可以安装此语言包,安装不成功的解决办法

因为AutoCAD2020未卸载干净导致&#xff0c;需要把AutoCAD2020的注册表清理干净&#xff0c;才可以安装 注册表打开&#xff0c;HKEY LOCAL MACHINE SOFTWARE Classesinstaller Products\7D2F3875100F0000102000060BECB6AB AHKEY LOCAL MACHINE SOFTWARE Classesinstaller Pro…

网工内推 | 技术支持工程师,最高15k,加班有补贴

01 星网信通 招聘岗位&#xff1a;售前技术支持 职责描述&#xff1a; 1、售前技术支持&#xff1a;技术交流、产品选型报价、方案制作等工作&#xff1b; 2、招投标支持&#xff1a;项目招标参数撰写、标书质疑、应标文件技术部分撰写及资质文件归纳准备、现场讲标及技术澄清…

Java 语法 (杂七杂八的知识)

面向对象三大特性 封装, 多态, 继承 基本数据类型 一字节 (Byte) 占八位 (bit) JDK, JRE, JVM JDK (Java Development Kit) : Java 开发工具包, 包括了 JRE, 编译器 javac, 和调试工具 Jconsole, jstack 等 JRE (Java Runtime Environment) : Java 运行时环境, 包括了 JVM , …

为什么职场关系越来越冷漠?

不知道从什么时候开始&#xff0c;我们的职场关系变得越来越冷漠了。 早上上班打卡的时候&#xff0c;一个个都低着头&#xff0c;眼神紧紧盯着手机&#xff0c;生怕错过什么重要的信息&#xff1b; 下班后大家一哄而散&#xff0c;各自抱着手机“享受”生活&#xff0c;谁也…

OSPF NSSA区域

原理概述 OSPF 协议定义了 Stub 区域和 Totally Stub 区域这两种特殊的非骨干区域&#xff0c;为的是精简 LSDB 中 LSA 的数量&#xff0c;同时也精简路由表中的路由条目数量&#xff0c;实现优化设备和网络性能的目的。根据定义&#xff0c; Stub 区域或 Totally Stub 区域中是…

计算机中GPU快不行的几个标志,看下有没有你遇到的

GPU是处理图形密集型任务的主要组件。尽管它非常耐用,但它最终会磨损并开始失效。在到达生命的终结之前,它通常会显示出即将发生故障的迹象,需要及时修复或更换。本指南详细介绍了这些标志。 在我们开始之前 在深入研究GPU故障的迹象之前,重要的是要承认,下面提到的一些…

Docker入门指南:Docker镜像的使用(二)

&#x1f340; 前言 博客地址&#xff1a; CSDN&#xff1a;https://blog.csdn.net/powerbiubiu &#x1f44b; 简介 在本章节中&#xff0c;将深入探讨 Docker 镜像的概念&#xff0c;以及如何使用镜像的一系列操作。 &#x1f4d6; 正文 1 什么是镜像 1.1 Docker镜像的简…

【信息收集-基于字典爆破敏感目录--御剑/dirsearch

两个工具都是内置字典来对于目录进行爆破的&#xff0c;这是信息收集的一部分&#xff0c;若能在列举出的目录中找到有价值的信息能为后续渗透做准备。 御剑比较简便 dirsearch需要集成python3.x环境&#xff0c;但是可选的命令更多。两者爆破的结果不一定相同&#xff0c;可以…

车载测试到底怎么样?真实揭秘!

什么是车载智能系统测试&#xff1f; 车载智能系统&#xff0c;是汽车智能化重要的组成部分&#xff0c;由旧有的车载资通讯系统结合联网汽车技术所演进而来&#xff0c;随着软硬件技术的不断进步&#xff0c; 让车载智能系统拥有强大的运算能力及多元化的应用功能。 车载智能…

VMvare如何更改虚拟机内共享文件夹的挂载点

更改虚拟机内共享文件夹的路径 进入目录 /etc/init.d ,并找到vmware-tools文件 里面有配置项 vmhgfs_mnt"/mnt/hgfs" 将引号内的内容更改为你需要挂载的路径,重启即可 注意挂载的路径不能是 “/”&#xff0c;必须根目录下的某个文件夹&#xff0c;或者其子文件夹 …