当前位置: 首页 > news >正文

selenium的定位方式java版

‌Selenium‌是目前最主流的‌Web浏览器自动化测试框架‌,专门用于模拟用户操作浏览器,实现Web应用的自动化测试,支持所有主流浏览器(Chrome、Firefox、Edge等)。

核心特点

  • ‌多语言支持‌:支持Java、Python、JavaScript、C#等主流编程语言,可适配不同技术栈的项目
  • ‌跨浏览器/跨平台‌:能在Windows、Mac、Linux等系统,驱动任意主流浏览器运行测试,兼容性测试非常方便
  • ‌支持复杂交互‌:可模拟点击、输入、拖拽、弹窗处理、iframe切换等所有真实用户操作,覆盖几乎所有Web场景
  • ‌生态丰富‌:配合Selenium Grid可实现分布式多浏览器并行测试,搭配TestNG、Pytest等框架能实现用例管理、断言、报告生成

Selenium 元素定位
在 Selenium 中,元素定位是自动化测试和网页操作的核心。

通过定位元素,可以对其进行点击、输入文本、获取属性等操作。

元素定位的基本概念
什么是元素定位?

元素定位是指通过某种方式找到网页中的特定元素(如按钮、输入框、链接等)。

为什么需要元素定位?

自动化操作需要精确找到目标元素,才能执行后续操作(如点击、输入等)。

定位元素的唯一性。

确保定位到的元素是唯一的,避免操作错误的元素。

一、通过 ID 定位

一般情况下页面元素的id属性在当前网页中是唯一的所以使用ID定位可以保证定位的唯一性,不会像其他定位方式一样可能定位到多个页面元素。但有的网页页面元素没有id属性值,导致无法使用ID定位方式。

例如以百度搜索为例
image

java代码

WebElement element = driver.findElement(By. id("chat-textarea"));

二、name定位

name属性值在一个网页中可以不是唯一值,因此使用name方式定位可能会同时定位到多个元素。

image

java代码

WebElement element = driver.findElement(By. name("tj_login"));

三、className定位

classname定位可以查找一个或者一组显示效果相同的页面元素。

image

java代码  


WebElement  element = driver.findElement(By.className( "lb")); 

四、linkText定位(链接全部文字)

此方式定位链接需要完全匹配链接的显示文字,常用于页面中存在多个链接文字高度相似的情况,无法使用部分链接文字定位。

image

java代码  


WebElement  element =  driver.findElement(By.linkText( "百度首页" ));

五、partialLinkText定位(链接部分文字)

这种定位方式只需模糊匹配链接的显示文字即可,常用于匹配页面链接文字不定期发生少量变化的情况,使用模糊匹配的方式可以提高链接定位的准确率,也可以用于模糊匹配一组链接的情况。

HTML 源码  


<a href="http://www.sogou.com">sogou搜索</a><br>
<a href="http://www.baidu.com">baidu搜索</a>

Java代码  


WebElement  element =  driver.findElement(By. partialLinkText( "baidu" ));
List<WebElement> elements=driver.findelement(By.partialLinkText("搜索"));

六、tagname定位(标签名称定位)

标签名定位方式主要用于匹配多个页面元素的情况,将找到的页面元素对象进行计数、遍历。。。

HTML 源码  


<a name="tj_setting" href="http://www.baidu.com/gaoji/preferences.html">搜索设置</a>
<a href="http://www.baidu.com">baidu搜索</a>

Java代码  


WebElement element=driver.findElement(By.tagName("a"));
List<WebElement> elements= driver.findElement(By.tagName(a));

七、XPath定位

基本用法: //标签名[@属性名=值]

/ :表示根节点

// :表示任意位置

  • :表示任意元素,*为通配符,可div、span等标签替换

@ :表示属性,比如class、alt等

. :表示当前节点

.. :表示父亲节点

**支持逻辑运算and/or **

//标签名[@属性名=值 and @属性名=值]

image

可以看到如果单纯用name定位,那么定位的元素有2个
结合逻辑运算之后确定唯一的元素
image

也可以通过序号确定唯一值
image

注意
XPath索引是从1开始的,所以[2]表示第二个元素。如果你要选择第一个元素,则使用[1]

使用模糊的属性值定

有时候会遇到页面元素属性值动态的生成,即每次刷新后元素属性值都会变动。使用模糊的属性值定位方式可解决一部分此类难题。使用的方法为一下两个:

  > starts-with()

  > contains()

java代码

//查找输入框id属性开始位置包含“in”关键字的页面元素
WebElement in=driver.findElement(By.xpath("//input[starts-with(@id,'in')]"));
//查找链接href属性包含“baidu”关键字的页面元素
WebElement bu=driver.findElement(By.xpath("//a[contains(@href,'baidu')]"));

使用页面元素的文本来定位
java代码


//查找元素文本为 baidu搜索  的链接
WebElement bd=driver.findElement(By.xpath("//a[text()='baidu搜索']")); //搜索包含 sogou 的连链接
WebElement sg=driver.findElement(By.xpath("//a[contains(text(),'sogou')]"));

使用XPath的轴(Axis)进行元素定位

使用XPath轴方式依据在文档树种的元素相对位置关系进行定位。先找到一个相对好定位的元素,依据它和要定位元素的相对位置进行定位,可解决一些元素难以定位的问题。提供的XPath轴关键字为一下几种:

  ① parent:选择当前节点的上层父节点

  ② child:选择当前节点的下层子节点

  ③ ancestor:选择当前节点所有上层的节点

  ④ descestor:选择当前节点所有上层的节点

  ⑤ following:选择在当前节点之后显示的所有节点

  ⑥ following-sibling:选择当前节点的所有平级节点

  ⑦ preceding:选择当前节点前面的所有节点

  ⑧ preceding-sibling:选择当前节点前面的所有同级节点

HTML

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>轴(Axis)定位元素</title>
</head>
<body><div id="div1"><input alt="div1-input1" id="iv1-input1" value="" /> <a href="http://www.baidu.com">test</a> <img alt="div1-img1" src=""><input type="button" id="div1-button1" name="div1-button" /></div><div id="div2"><input alt="div2-input2" id="div2-input2" value="" /> <a href="http://www.sogou.com">test</a> <img alt="div2-img2" src=""></div></body>
</html>
Xpath轴关键字 轴的定义说明 定位表达式实例 表达式解释
parent 选取当前节点的父节点 //img[@alt='div2-img2']/parent::div 查找到alt属性为div2-img2的img元素,并基于图片找到其上一级的div元素
child 选取当前节点的子节点 //div[@id='div1']/child::img 查找id为div1的div标签,基于当前div查找标签为img的子节点
ancestor 选取当前节点的所有上层节点 //img[@alt='div2-img2']/ancestor::div 查找alt属性为div2-img2的图片,基于当前图片找到其上级的div页面元素
descendant 选取当前节点所有下层节点 //div[@id='div2']/descendant::img 查找id属性为div2的div元素,在查找其下级所有节点中的img元素
following 选取当前节点之后显示的所有节点 //div[@id='div1']/following::img 查找到ID属性为div1的div元素,并基于div的位置找到它后面节点中的img元素
following-sibling 选取当前节点所有的平级节点 //img[@alt='div1-img1']/following-sibling::input 查找到alt属性为div1-img1的img页面元素,并基于img的位置找到后续节点中的input元素
preceding 选取当前节点前面所有的节点 //img[@alt='div2-img2']/preceding::div 查找到alt属性为div2-img2的图片页面元素,并基于图片的位置找到它前面节点中的div元素
preceding-sibling 选取当前节点前面所有平级的节点 //img[@alt='div2-img2']/preceding-sibling::a[1] 查找到alt属性值为div2-img2的图片元素,基于图片位置找到它前面同级节点的第二个链接页面元素

八、css定位

CSS Selector(CSS选择器)‌是比XPath更高效、语法更简洁的元素定位方式

基础定位语法
‌ID定位‌:#id值。示例:#username,定位速度最快,优先级最高。
‌Class定位‌:.类名。示例:.btn-submit,若类名含空格需转义或组合使用。
‌标签定位‌:标签名。示例:input,通常配合其他属性缩小范围。
‌属性定位‌:[属性='值']。示例:[name='email'],支持任意HTML属性。

进阶组合与层级
‌多属性组合‌:[attr1='v1'][attr2='v2']。同时满足多个条件,精准度极高。
‌后代选择器‌:空格隔开。示例:div input,查找div内部所有层级的input。
‌子元素选择器‌:> 符号。示例:ul > li,仅查找ul下的直接子级li。
‌伪类定位‌::nth-child(n)。示例:tr:nth-child(2),定位表格第二行。

http://www.gsyq.cn/news/1535041.html

相关文章:

  • 终极指南:如何用Legacy-iOS-Kit让你的旧iPhone重获新生
  • 从Redmon看监控系统设计:轻量级、低侵入的Sidekiq队列监控实践
  • FPGA实战(15):基于 Xilinx CORDIC IP 核的坐标变换模块设计与仿真
  • 义乌直发物流专线四家企业服务能力对比哪家好 - 奔跑123
  • 编写程序统计睡前手机时长,内容类型,分析对入睡速度,睡眠质量的影响。
  • 如何快速打造专业级Qt界面:Qt Material主题库的完整使用指南
  • 2026最新国内以及河北地区四氟垫片 / 膨体四氟垫片生产厂家实力排行及采购指南 - 奔跑123
  • 2026年6月工程车辆计数软件可靠之选:前沿AI技术如何重塑土石方管理 - 热点速览
  • 毕业论文神器!2026年性价比拉满的专业一键生成论文工具
  • Matplotlib标注思维:让图表具备AI级认知引导能力
  • Transformer长文本处理:分块合并的工程化实践与避坑指南
  • 零基础视频格式调整全套教学,无损转码保留画质与完整原声内容 - 软件工具教程方法
  • 魔兽争霸3终极优化指南:7大实用功能解决卡顿、宽屏与兼容性问题
  • MouseTester终极指南:三步搞定免费开源鼠标性能测试,精准优化你的外设体验
  • Docker build-arg:数据工作流的环境可信边界与构建时配置实践
  • 2026 LV、香奈儿、爱马仕哈尔滨奢侈品包包回收实力排行榜,榜首锁定添价收黄金奢侈品回收中心 - 薛定谔的梨花猫
  • RapidIO端口写控制器错误处理机制详解与编程实践
  • 艾视特智能视觉套件:低成本实现物体识别与手势控制的创客指南
  • 如何在3分钟内快速定位Windows热键冲突:Hotkey Detective终极指南
  • Qwen3-Max-Thinking:面向可审计推理的超大规模LLM架构解析
  • LinkSwift网盘直链下载助手:八大平台免费下载加速终极指南
  • Kodi自动字幕下载终极指南:轻松解决观影无字幕难题
  • 大模型越狱技术:从经典攻击到自动化对抗的攻防实战
  • 斋月终端提醒工具:为穆斯林开发者定制的轻量级CLI礼拜时间助手
  • NVIDIA Profile Inspector完整指南:免费解锁200+隐藏显卡设置的终极工具
  • RV1106嵌入式AI开发全攻略:从环境搭建到NPU部署实战
  • MOOTDX:Python量化投资的高效通达信数据接口实战指南
  • 影刀RPA进阶教程_智能等待策略让流程在任何网速下都不崩溃
  • 2026年玻璃钢彩绘浮雕厂家精选推荐及选购指南 - 曲阳嘉华园林
  • 新手卖包必看!2026杭州名包回收常见套路解析 - 开心测评