曲鸟全栈UI自动化教学(三):Selenium页面操作原理及如何高效的进行元素定位_selenium 高效

avatar
作者
猴君
阅读量:3

三、高效的定位方法和Xpath定位讲解

1. 利用浏览器工具

【Chrome】浏览器自带了定位方式的获取工具,按下F12(右键鼠标,点击"检查")也可以,按图中的步骤操作就可以获取到需要操作的元素地址
在这里插入图片描述


但在我们实际应用过程中,会出现定工具获取的Xpath定位地址,代码跑起来定位不到的情况!这种情况一般可能是因为元素的id是动态的(重新访问页面元素的id会变)或者所属层级冲突(操作页面步骤的顺序改变导致层级优先级不同)这个时候就可以借助Xpath的高级运用(文本关键字匹配,条件匹配等)来解决。


2.Xpath定位简单介绍

1. 绝对定位

通过【Chrome】自带的定位工具,选择【Copy full XPath】得到的就是xpath绝对路径 (非特殊情况不建议使用,使用相对定位即可)


在这里插入图片描述


路径代码

/html/body/div/div[2]/div[5]/div[1]/div/form/span[1]/input  

2. 相对定位

通过【Chrome】自带的定位工具,选择【Copy XPath】得到的就是xpath相对路径 (推荐使用)


在这里插入图片描述


路径代码

下面的代码会查找id等于kw的元素:

//\*[@id="kw"]  

3. Xpath代码解释
1. ///的区别和含义:

//代表会在所有节点去进行查找,如果要指定层级或逐层查找的话可以使用/

举个例子

下面的xml代码含义:一个班级下有两个学生【曲鸟 男】、【张三 女】:

<class> <student>   <name>曲鸟</name>   <gender>男</gender> </student> <student>   <name>张三</name>   <gender>女</gender> </student> </class>  

1)现在我们想获取第一个学生的信息可以这样写:

/class/student[1]  

输出结果

  <name>曲鸟</name>   <gender>男</gender>  

2)想获取第一个学生的名称可以这样写:

 /class/student[1]/name  

输出结果

曲鸟  

上面的代码是一层一层(class->student->name),那是否可以不指定层级,直接查找名称呢?

3)通过//获取学生名称:

/class/name  

甚至还可以这样写

//name  

输出结果

张三  

虽然获取到姓名了,但变成张三了,如果你通过//name[1]的方式来获取的话,会发现执行失效!
所以,//是不能够指定下标的,如果想获取曲鸟的话可以通过校验文本的方式来匹配:

//name[text()="曲鸟"]  

Xpath在线练习地址:https://www.bejson.com/testtools/xpath/


2. *的含义

*代表匹配任何元素节点,通过分析下图百度搜索框的源码发现它的标签为input,那么我们将代码改为这样//input[@id="kw"]也是可行的。
在这里插入图片描述


3. []的含义

[]中用于放置具体的匹配规则,之前代码中的[@id="kw"]代表匹配id等于kw的元素;分析上图红框标签的属性会发现,如果替换为[@name="wd"]也是能够匹配成功的;还可以改写为[@class="s_ipt"];


4. Xpath的模糊匹配和条件匹配

Xpath中=用于全匹配,那它支持模糊匹配吗?

答案是支持的,Xpath中=必须一模一样才算匹配成功。Xpath也可以通过contains进行模糊匹配,之前代码中的[@id="kw"]可以改写为[contains(@id, "k")]这样也能够匹配成功。它的含义为匹配id名称包含k的元素。


如果有两个id都包含k那不是就匹配失败了吗?

是的,这个时候就可以使用Xpath的条件判断,例如有两个元素,他们的id分别为:kw1kw2。我们想通过模糊匹配来匹配kw1的话,可以这样写[contains(@id,"k") and contains(@id,"1")],代码含义为匹配id名称既包含k又包含1的元素。

Xpath支持的条件【and、or、not、contains、starts-with、string(.)】:

一线互联网大厂Java核心面试题库

image

正逢面试跳槽季,给大家整理了大厂问到的一些面试真题,由于文章长度限制,只给大家展示了部分题目,更多Java基础、异常、集合、并发编程、JVM、Spring全家桶、MyBatis、Redis、数据库、中间件MQ、Dubbo、Linux、Tomcat、ZooKeeper、Netty等等已整理上传,感兴趣的朋友可以看看支持一波!

元素。

Xpath支持的条件【and、or、not、contains、starts-with、string(.)】:

一线互联网大厂Java核心面试题库

[外链图片转存中…(img-j4VCSr84-1714202503995)]

正逢面试跳槽季,给大家整理了大厂问到的一些面试真题,由于文章长度限制,只给大家展示了部分题目,更多Java基础、异常、集合、并发编程、JVM、Spring全家桶、MyBatis、Redis、数据库、中间件MQ、Dubbo、Linux、Tomcat、ZooKeeper、Netty等等已整理上传,感兴趣的朋友可以看看支持一波!

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!