2. [Java UI] web元素定位

标签和属性
标签,属性,文本
元素定位的原则:通过元素定位表达式,能找到唯一的目标元素。

  1. 标签:
  2. 属性:id,name,class
  3. 文本:超链接

一、六大基础元素定位

  1. id 定位 – 通过元素的 id 属性
By.id("XX");

WebElement webElement = driver.findElement(By.id("kw"));
webElement.sendKeys("CSDN”);
  1. name 定位 – 通过元素的 name 属性
By.name("XX");

WebElement webElement = driver.findElement(By.name("wd"));
webElement.sendKeys("CSDN”);
  1. tagName 标签名定位 – 通过元素的标签名(几乎不用,因为在一个页面中经常会有很多重复的标签名)
By.tagName("XX");
  1. className 样式名定位 – 通过元素的 class 属性
    坑1:样式名要以实际运行场景为准
    坑2:样式名的值有多个的情况下,不支持的;此时可以用其中一个样式来进行定位
By.className("XX");

driver.findElement(By.className("s_ipt")).sendKeys("CDSN");
driver.findElement(By.className("s_ipt")).click();
  1. linkText 超链接完整文本定位 – 通过超链接元素文本值(完整的)来进行定位
By.linkText("XX");

driver.findElement(By.linkText("hao123")).click();
  1. partialLinkText 超链接部分文本定位 – 通过超链接元素文本值(部分的)来进行定位
By.partialLinkText("XX");
  • 优先级:id定位 > name定位 > className定位 > linktText定位
  • findElement:找到符合定位条件的一个元素(如果符合条件的元素有多个的情况下,默认使用第一个元素)
  • findElements:找到符合定位条件的所有元素

二、 cssSelector元素定位

  1. 根据元素标签名定位,类似By.tagName()
By.cssSelector("input");

List<WebElement> allElement = driver.findElement(By.cssSelector("input"));
system.out.println(allElement.size());
  1. 根据ID,类似By.id()
By.cssSelector("#id");
By.cssSelector("标签名#id"); 
  1. 根据className(样式名),类似By.className(), 能支持多样式定位
By.cssSelector(".样式名");
By.cssSelector("标签名.样式名"); 
  1. 单属性选择定位
By.cssSelector("标签名[属性名='属性值']");
  1. 多属性选择定位
By.cssSelector("标签名[属性1='属性值'][属性2='属性值']");

三、 xpath元素定位

在这里插入图片描述

  • xpath其实就是一个path(路径),一个描述页面元素位置信息的路径,相当于元素的坐标
  • xpath基于XML文档树状结构,是XML路径语言,用来查询xml文档中的节点
  • 既可以用于XML,也可以用于HTML

1、xpath绝对定位 --禁止
绝对路径以单/号表示,而且是让解析引擎从文档的根节点开始解析,也就是html这个节点下开始解析

/html/body/div[2]/div/form/div[5]/button

缺点 :后期维护性差

2、xpath相对定位

打开UI上XPath搜索框的快捷键:ctrl+F(windows),start+F(Mac)

相对路径则以//表示,则表示让解析引擎从文档的任意符合的元素节点开始进行解析

定位方式

  • 属性定位
//标签名[@属性名='值']
//标签名[@属性名1='值1' and @属性名2=‘值2’] 
  • 文本定位
//标签名[text()='值']
  • 模糊匹配

    属性模糊匹配

//标签名[contains(@属性名,'值')]  
文本模糊匹配
//标签名[contains(text(),'值')]  
  • 层级关系定位

    使用场景:

     如果通过常规的方法定位到的元素不是唯一的,那么可以考虑先通过他们不同的父级或父级的父级来定位。
    

    方式一:先找父级再找对应元素

//*[@id='father']/child

方式二:先找父级的父级…再找对应元素

//*[@id='ancestor']//child

xpath轴定位

以上方式都无法定位到元素的情况下,可以考虑轴定位

轴名称释义
ancestor选取当前节点的所有祖先节点(包括父节点)
parent选取当前节点的父节点
preceding选取当前节点之前的所有节点
preceding-sibling选取当前节点之前的所有兄弟节点–找哥哥
following选取当前节点之后的所有节点
following-sibling选取当前节点之后的所有兄弟节点–找弟弟

使用语法:

轴名称::标签名

示例:

//a[text()='登录']//parent::td

总结

1、六大基础元素定位:id、name、classname、tagname、linktext、partialLinktext

2、css Selector选择器定位,支持基础的id、tagname、class属性的定位,以及还支持其他的属性选择/多属性组合选择定位

3、xpath定位,绝对路径-不要用
4、相对路径:

  • 属性
  • 文本
  • 模糊匹配
  • 层级关系
    5、 补充:
    https://www.cnblogs.com/ybbybb/p/14279974.html
    https://blog.csdn.net/m0_64132019/article/details/124391275
    html行元素有哪些: https://m.php.cn/faq/483611.html
    HTML基础知识: https://blog.csdn.net/weixin_44706267/article/details/121022104
    html行内元素和块状元素有哪些: https://www.php.cn/faq/470675.html

常见面试题

1、请尽可能多的列出自动化测试中元素定位方式,以及你最常用的定位方式?

2、如果一个元素无法定位,你一般会考虑哪些方面的原因?

3、动态属性元素如何定位?

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值