利用Xpath和jQuery进行元素定位示例
利用Selenium在做前端UI自动化的时候,在元素定位方面主要使用了XPATH和jQuery两种方法。XPATH作为主要定位手段,jQuery作为补充定位手段。因为在通过XPATH进行定位的时候,Selenium是通过游览器原生的API进行操作,更接近模拟用户的操作;而通过jQuery作为定位的时候,实质是向游览器发送一段JavaScript代码,虽然可以达到目的,但模拟效果不如前者。
以下列举了一些常用的定位写法。
- 通过id定位元素
<div class="input-outer" data-render="true">
<input type="text" name="templateName2" id="tempdata" size="20" maxlength="20" class="input tuiRequired tuiUpper tuiTrim myRule" value="">
</div>
jQuery写法: $("input#tempdata")
XPATH写法: //input[@id="tempdata"]
- 通过class定位元素
<span class="icon sm icon-cross hover"></span>
jQuery写法: $("span.icon.sm.icon-cross.hover")
XPATH写法: //span[@class="icon sm icon-cross hover"]
- 通过文本内容定位元素
<span class="name">CA模板管理</span>
jQuery写法: $("span:contains('CA模板管理')")
XPATH写法: //span[contains(text(),"CA模板管理")]
- 多属性组合定位元素
<div class="tab-title">模板规则列表</div>
定位思路:通过class和文本内容定位元素
jQuery写法: $("div.tab-title:contains('模板规则列表')")
XPATH写法: //div[@class="tab-title" and contains(text(),"模板规则列表")]
- 匹配子元素
<div class="h-ctrl h-close">
<span class="icon sm icon-cross hover">A</span>
</div>
<div class="x-ctrl x-close">
<span class="icon sm icon-cross hover">A</span>
</div>
定位第二个A的思路:两个A的父元素不同,通过父元素定位子元素
写法1:
jQuery写法: $("div.x-ctrl.x-close > span.icon.sm.icon-cross.hover")
XPATH写法: //div[@class="x-ctrl x-close"]/span[@class="icon sm icon-cross hover"]
写法2:
jQuery写法: $("div.x-ctrl.x-close").children("span.icon.sm.icon-cross.hover")
XPATH写法: //div[@class="x-ctrl x-close"]/child::span[@class="icon sm icon-cross hover"]
- 匹配到的元素的第一个
<div class="h-ctrl h-close">
<span class="icon sm icon-cross hover">A</span>
</div>
<div class="x-ctrl x-close">
<span class="icon sm icon-cross hover">A</span>
</div>
定位第一个A
jQuery写法一: $("span.icon.sm.icon-cross.hover").first()
jQuery写法二: $("span.icon.sm.icon-cross.hover").eq(0)
XPATH写法: (//span[@class="icon sm icon-cross hover"])[1]
- 匹配到的元素的最后一个
<div class="h-ctrl h-close">
<span class="icon sm icon-cross hover">A</span>
</div>
<div class="x-ctrl x-close">
<span class="icon sm icon-cross hover">A</span>
</div>
定位最后一个A
jQuery写法一: $("span.icon.sm.icon-cross.hover").last()
jQuery写法二: $("span.icon.sm.icon-cross.hover").eq(-1)
XPATH写法: (//span[@class="icon sm icon-cross hover"])[last()]
- 匹配到的元素的倒数第二个
<div class="h-ctrl h-close">
<span class="icon sm icon-cross hover">A</span>
</div>
<div class="x-ctrl x-close">
<span class="icon sm icon-cross hover">A</span>
</div>
<div class="y-ctrl y-close">
<span class="icon sm icon-cross hover">A</span>
</div>
定位倒数第二个A
jQuery写法: $("span.icon.sm.icon-cross.hover").eq(-2)
XPATH写法: (//span[@class="icon sm icon-cross hover"])[last()-1]
- 匹配当前元素的后代元素(子、孙等)
<div class="x-window">
<div class="h-ctrl h-close">
<span class="icon sm icon-cross hover">A</span>
</div>
</div>
<div class="y-window">
<div class="h-ctrl h-close">
<span class="icon sm icon-cross hover">A</span>
</div>
</div>
<div class="z-window">
<div class="h-ctrl h-close">
<span class="icon sm icon-cross hover">A</span>
</div>
</div>
定位中间的A
jQuery写法: $("div.y-window").find("span.icon.sm.icon-cross.hover")
XPATH写法: //div[@class="y-window"]/descendant::span[@class="icon sm icon-cross hover"]
- 通过同级元素进行匹配
<div class="x-ctrl x-close">
<span class="icon sm icon-cross hover">B</span>
<div class="h-focus">
<span class="icon sm icon-cross hover">A</span>
</div>
</div>
<div class="x-ctrl x-close">
<span class="icon sm icon-cross hover">C</span>
<div class="h-focus">
<span class="icon sm icon-cross hover">A</span>
</div>
</div>
定位第二个A
jQuery写法: $("span:contains('C')").siblings("div.h-focus").children("span:contains('A')")
XPATH写法: //span[contains(text(),"C")]/following-sibling::div[@class="h-focus"]/span[contains(text(),"A")]
- 稍微复杂一点的定位
<div class="x-window">
<td class="rule">
<span>A</span>
</td>
<td class="rule">
<div class="button">"控制按钮"</div>
</td>
</td>
<div class="x-window">
<td class="rule">
<span>B</span>
</td>
<td class="rule">
<div class="button">"控制按钮"</div>
</td>
</td>
举个例子,比如说页面上的A和B元素是动态的,但是有一个规律,A或者B的父元素的同级元素一定有一个"控制按钮"的子元素。
定位 "控制按钮"
jQuery写法: $("span:contains('B')").parent("td.rule").siblings("td").children("div:contains('控制按钮')")
XPATH写法: //span[contains(text(),"B")]/parent::td[@class="rule"]/preceding-sibling::td/child::div[contains(text(),"控制按钮")]
注:以上只是在工作时遇到比较典型的元素定位进行的举例,定位方式不是唯一,可能有多重定位方式。更多的定位方式请参考jQuery语法和XPath语法。
利用Xpath和jQuery进行元素定位示例的更多相关文章
- jquery 未来元素事件示例 on() delegate() live()
jquery 1.7版后建议使用on() $(document).on("click","#green",function(){$(this).after('& ...
- 【WEB自动化】【第一节】【Xpath和CSS元素定位】
目前自动化测试开始投入WEB测试,使用RF及其selenium库,模拟对WEB页面进行操作,此过程中首先面对的问题就是对WEB页面元素的定位,几乎所有的关键字都需要传入特定的WEB页面元素,因此掌握常 ...
- Selenium2学习-009-WebUI自动化实战实例-007-Selenium 8种元素定位实战实例源代码(百度首页搜索录入框及登录链接)
此 文主要讲述用 Java 编写 Selenium 自动化测试脚本编写过程中,通过 ID.name.xpath.cssSelector.linkText.className.partialLinkTe ...
- Web自动化必会知识:「Web基础、元素定位、元素操作、Selenium运行原理、项目实战+框架」
1.web 基础-html.dom 对象.js 基本语法 Dom 对象里面涉及元素定位以及对元素的修改.因为对元素操作当中涉及的一些 js 操作,js 基本语法要会用.得要掌握前端的基本用法.为什么要 ...
- selenium+python自动化之元素定位
自动化按步骤拆分的话,可以分为四步操作:定位元素,操作元素,获取返回结果,断言(返回结果与期望结果是否一致),最后自动出测试报告.本篇接下来讲基本的八种元素定位方法.说的通俗一点,就是教大家找对象. ...
- 4、通过uiautomatorviewer实现appium元素定位
熟悉selenium自动化的小伙伴应该知道WebDriver 提供了八种元素定位方法: idnameclass nametag namelink textpartial link textxpathc ...
- Selenium2学习-002-Selenium2 Web 元素定位及 XPath 编写演示示例
此文主要对 Selenium2 的 Web 元素定位及 XPath 编写示例,敬请各位亲们参阅,共同探讨.若有不足之处,敬请各位大神指正,不胜感激! 通过 Firefox(火狐)浏览器的插件 Fire ...
- Robot Framework与Web界面自动化测试学习笔记:利用xpath定位元素
在rf中,利用selinum2的关键字进行用例编写时,很多关键字的参数是html元素的定位标识. 最简单的方式,是通过id 或name来描述元素定位信息,如 click button id=l ...
- jquery的相对父元素和相对文档定位示例代码
在开发jquery时候经常需要用到定位,有相对父元素定位和相对文档定位,本文为此总结下,有需要的朋友可以参考下 在开发jquery时候经常需要用到定位,这里概括两种定位: 1.相对父元素定位: $(& ...
随机推荐
- ZooKeeper环境搭建(单机/集群)(转)
前提: 配置文件主要是在$ZOOKEEPER_HOME/conf/zoo.cfg,刚解压时为zoo_sample.cfg,重命名zoo.cfg即可. 配置文件常用项参考:http://www.cnbl ...
- Java开发中的几种对象的说明(PO,VO,DTO,BO,POJO,DAO,SAO等)
一.PO :(persistant object ),持久对象 可以看成是与数据库中的表相映射的java对象.使用Hibernate来生成PO是不错的选择. 二.VO :(value object) ...
- 【JavaSE】day03_Date、SimpleDateFormat、Calendar、Collection
[JavaSE]day03_Date.SimpleDateFormat.Calendar.Collection 1.Date及其经常使用API 1)JAVA 中的时间 Java中的时间使用标准类库的D ...
- Rust 中项目构建管理工具 Cargo简单介绍
cargo是Rust内置的项目管理工具.用于Rust 项目的创建.编译.执行,同一时候对项目的依赖进行管理,自己主动推断使用的第三方依赖库,进行下载和版本号升级. 一.查看 cargo 版本号 安装R ...
- 最全Linux 与 Linux Windows 文件共享
前提说明: windows主机信息:192.168.1.100 帐号:abc password:123 共享目录:share linux主机信息:192.168.1.200 帐号:def passwo ...
- Pig 在 shell script中被调用,批量载入处理文件
首先,我想达到的目的是批量的处理一个目录下的的很多文档,这些文档保存了我要处理的数据,由于pig是初学..所以不知到该怎么批量的load,没有写过 自己的UDF,仅仅能一个一个文件的load,然后处理 ...
- vim中凝视多行python代码
在vim中凝视多行python代码比較麻烦,主要由下面几种方法: (1)将须要凝视的代码以文档字符串的形式呈现 (2)将须要凝视的代码以函数的形式呈现 (3)使用vim自身快捷键 我们主要使用第三种方 ...
- WPF学习笔记——没有前途的WPF
看上去,WPF比silverlight有前途一点.毕竟,微软还没有宣布,WPF停止更新. 但我怀疑,不久的将来,WPF也会步其子集silverlight的后尘,要么不再出后续版本,要么向HTML5 + ...
- oc44--多对象内存管理
// Room.h #import <Foundation/Foundation.h> @interface Room : NSObject @property int no;// 房间号 ...
- 【Luogu4389】付公主的背包
题目 传送门 解法 答案显然是\(n\)个形如\(\sum_{i \geq 1} x^{vi}\)的多项式的卷积 然而直接NTT的时间复杂度是\(O(nm\log n)\) 我们可以把每个多项式求\( ...