java selenium操作定位元素

  • 1、元素选择策略
    • 1.1、使用选择器的提示
  • 2、定位元素
  • 3、定位多个元素
  • 4、相对定位
    • 4.1、above()

1、元素选择策略

WebDriver 中有 8 种不同的内置元素定位策略:

定位器Locator 描述
class name 定位class属性与搜索值匹配的元素(不允许使用复合类名)
css selector 定位 CSS 选择器匹配的元素
id 定位 id 属性与搜索值匹配的元素
name 定位 name 属性与搜索值匹配的元素
link tex t 定位link text可视文本与搜索值完全匹配的锚元素
partial link text 定位link text可视文本部分与搜索值部分匹配的锚点元素。如果匹配多个元素,则只选择第一个元素。
tag name 定位标签名称与搜索值匹配的元素
xpath 定位与 XPath 表达式匹配的元素

1.1、使用选择器的提示

一般来说,如果 HTML 的 id 是可用的、唯一的且是可预测的,那么它就是在页面上定位元素的首选方法。它们的工作速度非常快,
可以避免复 杂的 DOM 遍历带来的大量处理。如果没有唯一的 id,那么最好使用写得好的 CSS 选择器来查找元素。
XPath 和 CSS 选择器一样好用,但是它语法很复杂,并且经常很难调试。尽管 XPath 选择器非常灵活,
但是他们通常未经过浏览器厂商的性能测试,并且运行速度很慢。
基于链接文本和部分链接文本的选择策略有其缺点,即只能对链接元素起作用。此外,它们在 WebDriver 内部调用 XPath 选择器。
标签名可能是一种危险的定位元素的方法。页面上经常出现同一标签的多个元素。这在调用 findElements(By) 方法返回元素集合的时候非常有用。
建议您尽可能保持定位器的紧凑性和可读性。使用 WebDriver 遍历 DOM 结构是一项性能花销很大的操作,搜索范围越小越好。

2、定位元素

使用 WebDriver 时要学习的最基本的技术之一是如何查找页面上的元素。 WebDriver 提供了许多内置的选择器类型,其中包括根据 id 属性查找元素:


WebElement cheese = driver.findElement(By.id("cheese"));

如示例所示,在 WebDriver 中定位元素是在 WebDriver 实例对象上完成的。 findElement(By) 方法返回另一个基本对象类型 WebElement。
1. WebDriver 代表浏览器
2. WebElement 表示特定的 DOM 节点(控件,例如链接或输入栏等)
一旦你已经找到一个元素的引用,你可以通过对该对象实例使用相同的调用来缩小搜索范围:

WebElement cheese = driver.findElement(By.id("cheese"));
WebElement cheddar = cheese.findElement(By.id("cheddar"));

你可以这样做是因为, WebDriver 和 WebElement 类型都实现了 搜索上下文 接口。在 WebDriver 中,这称为 基于角色的接口。
基于角色的接口允许你确定特定的驱动程序实现是否支持给定的功能。这些接口定义得很清楚,并且尽量只承担单一的功能。
你可以关于 WebDriver 的设计,以及在 WebDriver 中有哪些角色被支持,在其他被命名的部分。
因此,上面使用的 By 接口也支持许多附加的定位器策略。嵌套查找可能不是最有效的定位 cheese 的策略,因为它需要向浏览器发出两个单独的命令:
首先在 DOM 中搜索 id 为“cheese”的元素,然后在较小范围的上下文中搜索“cheddar”。

3、定位多个元素

代码示例:

<ol id=cheese><li id=cheddar>…<li id=brie>…<li id=rochefort>…<li id=camembert>…
</ul>

findElements(By) 。此方法返回 web 元素的集合。如果只找到一个元素,它仍然返回(一个元素的)集合。
如果没有元素被定位器匹配到,它将返回一个空列表。

List<WebElement> muchoCheese = driver.findElements(By.cssSelector("#cheese li"));

4、相对定位

在Selenium 4中带来了相对定位这个新功能,在以前的版本中被称之为"好友定位 (Friendly Locators)"。
它可以帮助你通过某些元素作为参考来定位其附近的元素。 现在可用的相对定位有:
- above() 返回WebElement,它显示在指定元素的上方
- below() 返回WebElement,它显示在指定元素的下方
- toLeftOf() 返回WebElement,它显示在指定元素的左侧
- toRightOf() 返回WebElement,它显示在指定元素的右侧
- near() 返回WebElement,该WebElement最多50px与指定的元素分离。
findElement 方法现在支持witTagName()新方法其可返回RelativeLocator相对定位对象。
Selenium是通过使用JavaScript函数 getBoundingClientRect() 来查找相对元素的。这个函数能够返回对应元素的各种属性例如:右,左,下,上。

4.1、above()

只示例 above():
返回当前指定元素位置上方的WebElement对象
通过下面的例子我们来理解一下关于相对定位的使用

//import static org.openqa.selenium.support.locators.RelativeLocator.withTagName;
WebElement passwordField= driver.findElement(By.id("password"));
WebElement emailAddressField = driver.findElement(withTagName("input").above(passwordField));

【参考】:selenium document

java selenium一一操作定位元素相关推荐

  1. java selenium一一等待超时设置

    java selenium一一超时设置 前言 1.显式等待 2.隐式等待 3.流利等待 前言 在使用selenium中我们遇到了,有时候一个点击查询或者其它操作需要加载等待很长的时间,我的程序就会等待 ...

  2. python selenium定位元素方法,python + selenium 练习篇 - 定位元素的方法

    1.利用ID定位元素(能直接通过ID来定位的元素比较少) # coding=utf-8 from selenium import webdriver driver = webdriver.Chrome ...

  3. selenium之find_element_by_xpath定位元素

    selenium之find_element_by_xpath定位元素 一 方法 selenium为定位元素提供了较多方法,大致分为单元素定位和多元素定位. # 查找单个元素:find_element_ ...

  4. Selenium Tips - CSS定位元素

    Selenium Tips - CSS定位元素 原文: http://sauceio.com/index.php/2010/01/selenium-totw-css-selectors-in-sele ...

  5. python元素定位id和name_python中通过selenium简单操作及元素定位知识点总结

    浏览器的简单操作 # 导入webdriver模块 # 创建driver对象,指定Chrome浏览器 driver = webdriver.Chrome() # 窗口最大化 driver.maximiz ...

  6. python + selenium 练习篇 - 定位元素的方法

    1.利用ID定位元素(能直接通过ID来定位的元素比较少) # coding=utf-8 from selenium import webdriver driver = webdriver.Chrome ...

  7. Selenium+iframe准确定位元素

    简单介绍 我们发现该网站有两个框架: 网页代码如下所示: 我们发现iframe对应着单独的一个框架,因此我们定位元素时,要判断该元素有没有嵌套在iframe框架中. 程序示例 以天猫登陆界面为例,网址 ...

  8. Selenium使用xpath定位元素

    参考资料: [web自动化测试]xpath元素定位 核心用法 接下来是使用 xpath 必须掌握的核心知识点,只要掌握好这些知识点,基本上能定义到想要的元素. //input[@name='accou ...

  9. java + selenium 种WebElement 定位到父元素 跟子元素

    WebElement alarm = webDriver.findElement(By.linkText("子节点));WebElement parents = alarm.findElem ...

最新文章

  1. 第十七届全国大学生智能车竞赛智能视觉组培训第一弹
  2. Intellij-Cannot download Sources解决方法
  3. 公司禁用U盘和移动硬盘的方法
  4. 动态规划求解疯狂的采药问题(洛谷P1616题题解,Java语言描述)
  5. C++的文件读写以及python的文件读写
  6. 2019春运大幕即将开启 西安动车列车员整装迎春运
  7. 批量将xls转换成xlsx
  8. Hexo+Github搭建个人博客(一)——开始搭建
  9. SpringBoot +spring security 与CSRF有关的几个 问题
  10. matlab正弦函数傅里叶变换,正弦函数及其傅里叶变换 二
  11. DBSCAN 聚类算法
  12. 安徽自招大专计算机,2021年安徽自主招生学校名单有哪些,安徽自主招生大专院校名单【详细版】...
  13. android es2 es3,详细内幕剖析九号滑板车es2和es3有什么区别?哪个好?口碑真实揭秘...
  14. (详细)Windows10系统自动修复方法
  15. 关于vue项目表单验证身份证号的正则表达式
  16. 把VBA转换成JAVA_请教,我用Excel中生成了Java代码,用VBA生成Jav
  17. 魂斗罗经典12个版本
  18. DPDK Mempool
  19. bzoj 4398: 福慧双修(最短路建模/构造)
  20. H265编码 SPS分析

热门文章

  1. 计算机考试通行证和信息反了,2019年全国计算机等级考试考前解题指导准考证常见问题.docx...
  2. Python爬虫 - 00.实现什么值得买签到
  3. 分布式储能系统发展趋势和未来
  4. 学习、生活、工作心得记录
  5. 搞 IoT 物联网居然要用这么多通信协议...
  6. 学习笔记 - CFA 权益 2
  7. 禁用EXCEL的Open/Save As功能
  8. 5款轻量易上手的团队目标管理软件(推荐收藏)
  9. PTA 7-123 空心字母金字塔
  10. Windows 10 休眠后自动开机