新闻详情

新闻详情

首页 / 资讯中心 / 详情

Selenium教程系列(二):元素查找及操作

发布时间:2026/9/3 8:00:29来源:尧图网络
Selenium教程系列(二):元素查找及操作
上一篇教程写了个Demo实现了打开百度的首页那打开网页肯定是要操作网页的那怎么操作呢一个网页会有很多的元素那我们第一步就肯定是找到要操作的元素了首先我们简单写一个html页面新建一个记事本然后把以下代码复制进去!doctype html html langen head meta charsetUTF-8 meta nameGenerator contentEditPlus® meta nameAuthor content meta nameKeywords content meta nameDescription content titleDocument/title /head body input idun classcss1 nameusername / input idpw classcss2 lala namepassword / input idco classcss3 namecode /br / input typebutton idbtn classcss4 namesubmit value按钮 / script document.getElementById(btn).onclick function(){ alert(haha); } /script /body /html保存然后更改后缀为html这里我存在桌面名称为test.html然后双击它就会用浏览器打开当然如果你默认浏览器是IE的话那么就是使用IE浏览器打开。也是一样的不影响打开以后把地址栏里的地址复制一下贴粘到java代码里替换掉原先写的百度首页的网址然后运行脚本就会使用谷歌浏览器打开测试页面了。那现在这个页面有三个输入框和一个按钮我们现在要操作这几个元素。selenium查找网页元素有好几种方式。在整个页面找那就是用driver.findElement方法。当然也可以在某一个元素里面找。那就是使用元素的findElement方法了。通过eclipse工具我们可以看到查找元素的方法有这么几个className、cssSelector、id、linkText、name、partialLinkText、tagName、xpath。className就是通过元素的class来定位元素。在页面上一个元素是可以有多个class的像我们写的案例第二个input标签 输入框就有css2和lala两个class。所以通过css2和lala都可以定位到这个input。但同时多个标签也可以使用同一个class所以通常情况下通过className来定位元素都是使用driver.findElements方法也就是找出多个元素然后再通过下标获取到想要的元素。使用driver.findElement方法如果有多个也只会返回找到的第一个。cssSelector这个基本可以忽略使用这个方法你得需要一些前端的知识。前端在写css的时候怎么定位一个元素是有一定的语法的而这个方法就是使用css定位元素的语法。比如#aaa .css3这个就表示id为aaa的元素下class为css3的元素。id就是通过元素的id属性来查找元素在一个页面中一个id通常只会定位到一个元素。通过id来查找元素效率是最高的但很多元素通常是没有id的。linkText就是通过a标签之间的文本。来定位a标签。比如我们打开百度的首页右上角这个新闻就是一个a标签。By.linkText(新闻)就可以定位到这个元素。name就是通过元素的name属性来定位元素。通常情况下只有表单元素才会有name属性。partialLinkText顾名思义就是通过a标签的部分文本来定位tagName就是通过标签名来定位元素。xpath就是利用xpath的语法来定位元素。xpath是XML文档定位节点元素的一种语法HTML也是标准的XML文档所以就可以使用xpath来查找HTML文档的元素。通过xpath查找元素效率不是很高。但这也只是以前现在电脑的配置都比较高了。这点性能的影响基本上是可以忽略了。同时现在前端一般都是使用React.js、Vue.js、Angular.js等框架使用这些框架一般都不会给元素加id、name属性。所以通过id、name找元素的方式就很难行得通了这个时候还就得使用万能的xpath。关于xpath的语法规则后面会详细地讲。好了那我们现在就使用这些方法来操作页面的元素代码Test public void test222() throws Exception { // 打开测试页面 driver.get(file:///C:/Users/Administrator/Desktop/test.html); //通过id找到第一个输入框 WebElement un driver.findElement(By.id(un)); //第一个输入框输入aaa un.sendKeys(aaa); //通过className找到第二个输入框 WebElement pw driver.findElement(By.className(lala)); //第二个输入框输入bbb pw.sendKeys(bbb); //通过name找到第三个输入框 WebElement co driver.findElement(By.name(code)); //第三个输入框输入ccc co.sendKeys(ccc); Thread.sleep(2000); //找到页面所有的input标签 ListWebElement inputs driver.findElements(By.tagName(input)); //获取第4个input标签即按钮 WebElement btn inputs.get(3); //点击按钮 btn.click(); Thread.sleep(3000); }这里我只贴了Test部分的代码Before和After部分的代码和之前都是一样的。后面也一直是这样这两部分的代码基本上是固定的。获取到一个web元素之后就可以操作这个web元素通过eclipse可以查看有哪些方法。这里只介绍常用的几个方法。clear这个方法通常用于清空输入框的内容click点击元素findElement、findElements就是在元素里面找子元素了和driver的使用一样getAttribute获取元素的属性。在我们写的案例里面input标签的id、class、name、value等都是属性getTagName获取元素的标签名getText获取标签的文本双标签才有文本。我们写的案例中input是单标签是没有文本的。divasdf/div类似这样的为双标签那么获取它的文本就是asdf。如果标签里面还是子标签子标签是不算作文本的。sendKeys输入内容一般是输入框才会使用这个方法。三个is开头的方法isDisplayed元素是否显示在页面上元素是可以设置为隐藏或是不显示状态的但它在文档里却是存在的。你没看见不代表不存在请记住这句话。isEnabled元素是否可交互也就是我们常说的启用/禁用状态了。isSelected元素是否被选中一般是单选按钮复选按钮及下拉选择框会用到这个判断。欢迎加入测试群91425817一起讨论测试的那此事。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

MATLAB驱动的ROMS-SWAN-COAWST海洋数值模拟工程化流水线 2026/9/3 7:59:18

MATLAB驱动的ROMS-SWAN-COAWST海洋数值模拟工程化流水线

简介:本资源是面向海洋科学研究生、科研人员及数值模拟初学者的MATLAB集成工具包,专为ROMS区域海洋模式、SWAN波浪模型及COAWST耦合系统提供全流程预处理与后处理支持,解决网格生成、边界条件构建、初始场与气候文件制作、结果可视化等核心建…

阅读更多 →
【信息科学与工程学】【解决方案体系】【系统工程】 第三十五篇 AI + ICT + 云计算 + 网络解决方案​ 的软件配置清单01 2026/9/3 7:59:18

【信息科学与工程学】【解决方案体系】【系统工程】 第三十五篇 AI + ICT + 云计算 + 网络解决方案​ 的软件配置清单01

AI + ICT + 云计算 + 网络解决方案​ 的软件配置清单。需要说明:结合当前主流通用 CAE、数学建模、AI 框架、云原生与网络仿真工具整理出的推荐软件栈。 一、基础平台与云原生底座 软件 / 平台 功能说明 Kubernetes (K8s)​ 容器编排,承载 AI 训练、仿真任务调度、微服务…

阅读更多 →
帮派联赛反向开无间机制解析:跨日战斗的技术原理与战术应对 2026/9/3 7:59:18

帮派联赛反向开无间机制解析:跨日战斗的技术原理与战术应对

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
过滤式SFT:为强化学习铺路的LLM后训练新思路 2026/9/3 7:59:18

过滤式SFT:为强化学习铺路的LLM后训练新思路

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
基于52单片机的BMS仿真与设计:从Proteus仿真到硬件实践 2026/9/3 7:59:18

基于52单片机的BMS仿真与设计:从Proteus仿真到硬件实践

简介:本资源是一套面向嵌入式初学者与课程设计者的基于52单片机的电池管理系统(BMS)仿真教学方案,聚焦锂电池电压监测、温度采集与LCD实时显示等核心功能实现,适用于单片机原理、嵌入式系统课程实践及电子类毕业设计入…

阅读更多 →
Delphi 12.3 HttpServer与Post实战:构建企业级HTTP服务与RESTful API 2026/9/3 7:56:18

Delphi 12.3 HttpServer与Post实战:构建企业级HTTP服务与RESTful API

简介:本资源是面向Delphi中级开发者与桌面应用后端集成实践者的技术示例包,聚焦Delphi 12.3环境下轻量级HTTP服务构建与POST请求处理的核心实现。资源提供完整的HttpServer服务端工程及配套客户端交互逻辑,涵盖服务启动、路由注册、JSON数据解…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞