selenium元素定位(Java)
1.使用findElement方法定位元素
findElement()方法:当开始寻找符合指定条件的元素时,它将查询整个DOM,然后返回第一个找到的匹配元素。
By id:通过元素ID属性定位元素//driver.findElement(By.id("XXXX"));
By name: 通过元素Name属性定位元素//driver,findElement(By.name("XXXX"));
By className:通过元素classname属性定位元素//driver.findElement(By.className("XXXX"));
By tagName:通过HTML标记名定位元素//driver.findElement(By.tagName("XXXX"));
By linkText:通过文本定位链接//driver.findElemen(By.linkText("XXXX"));
By partialLinkText:通过部分文本定位链接//driver.findElement(By.partialLinkText("XXXX"));
By cssSelector:通过CSS定位元素//driver.findElement(By.cssSelector("XXXX"));
By xpath:通过Xpath定位元素//driver.findElement(By.xpath("XXXX"));
dom定位:DOM(Document Object Model)被用于描述HTML文档,可以使用JavaScript来访问。DOM定位策略通过JavaScript评估页面上的元素,可以使用分级符号简化元素定位。
《定位优先顺序:id.name.classname>css>xpath》
备注1:查询子类元素
我们第一步可以先定位到其父元素 <div>然后再定位其子元素,方 法如下:
WebElement div =driver.findElement(By.id("div1"));
WebElement topLink = div.findElement(By.linkText("top"));
缩写:
WebElement topLink =driver.findElement(By.id("div1")).findElement(By.linkText("top"));
2.使用findElements方法定位元素
driver.get("http://www.baidu.com");
List<WebElement> links =driver.findElements(By.cssSelector("#nv a"));
//验证链接数量
assertEquals(10,links.size());
//打印href属性
for(int i :links.size()){
System.out.println(links.get(i).getAttribute("href"));
}
备注:findElements()方法返回所有匹配定位策略的WebElement的集合,我们可以用java中的List类来创建WebElements的实例
List类中的size()方法会统计集合中元素的总数量
通过for循环将得到List中的所有元素,再调用getAttribute()方法得到元素的属性。
3.使用CSS选择器定位元素
3.1、css常用符号:
# 表示id
. 表示class
> 表示子元素,层级
一个空格也表示子元素,但是是所有的后代子元素,相当于xpath中的相对路径
例子:
<div class="input_class" type="text" name="passwd" id="passwd-id" />
#input 选择id为passwd-id的节点
.input_class 选择class为input_class的节点
div#passwd-id>input 选择id为passwd-id的div下的所有的input节点
div#passwd-id input 选择id为passwd-id的div下的所有的input节点
div.input_class[name='passwd'] 选择class为input_class并且name为passwd的节点
div[name='passwd'][type='text'] 选择name为passwd且type为text的节点
4.使用xpath定位元素
/ 表示绝对路径绝对路径是指从根目录开始
// 表示相对路径
. 表示当前层
.. 表示上一层
* 表示通配符
@ 表示属性
[] 属性的判断条件表达式
xpath常用函数:
contains (): //div[contains(@id,'widget')],选择id属性中包含'widget'的div
text(): //a[text()='hello world'],选择文本值为'hello world'的节点
last(): 选择最后一个
starts-with(): //div[starts-with(@id,'common')] ,选择id属性中’common’开头的div节点
not(): 否定
5.定位表格行和单元格
</pre><pre name="code" class="java">driver.get("http://www.w3school.com.cn/html/html_tables.asp");
List<WebElement> rows=driver.findElements(By.cssSelector(".dataintable>tr"));
//验证表格的行数
assertEquals(11,rows.size());
//打印出所有单元格的数据
for (WebElement row : rows){
//得到当前tr里td的集合
List <WebElemnt> cols=rows.findElements(By.tagName("td"));
for(WebElement col :cols){
System.out.print(col.getText());//得到td里面的文本
}System.out.println();
}driver.close();
}
</pre><span style="color: rgb(102, 102, 204); "><strong>6.定位表格中的子元素</strong></span>对于下方一个表格:<p></p><p><img src="https://img-blog.csdn.net/20151222175208239?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /></p><p>表格代码:</p><p><span style="white-space:pre"></span></p><pre name="code" class="html"><tr>
<td>Nash</td>
<td><a href="mailto:nash@test.com">Nash@test.com</a></td>
<td>
<div>
<label for="user128_admin">Admin</label>
<input type="checkbox" id="user128_admin" checked="true"/>
<label for="user128_cm">Content Manager</label>
<input type="user128_browser">Browser</label>
<input type="checjbox" id ="user128_browser"/>
</div>
</td>
</tr>
如果想要给nash用户授予admin的权限。这可以通过xpath来实现,方法如下:
WebElement adminCheckBox =driver.findElement(By.xpath("//td[contains(text(),'Nash')]folloing-sibing::td/descendant::div/label[contains(text(),'Admin')]/following-sibling::input"));
adminCheckBox.click();
也可以通过CSS选择器来实现:
WebElement adminCheckBox =driver.findElement(By.cssSelector("td:contains('Nash')+td+td>div>label:contains('Admin')+input"));
adminCheckBox.click();
|
selenium元素定位(Java)的更多相关文章
- selenium元素定位陷阱规避
为什么selenium可以在各个浏览器上运行?因为selenium在与各个浏览器驱动执行前,会先把脚本转化成webdriver, webdriver wire协议(一种json格式的协议),这样就与脚 ...
- 自动化测试基础篇--Selenium元素定位
摘自https://www.cnblogs.com/sanzangTst/p/7457111.html 一.Selenium元素定位的重要性: Web自动化测试的操作:获取UI页面的元素,对元素进行操 ...
- Selenium3 + Python3自动化测试系列二——selenium元素定位
一.selenium元素定位 Selenium对网页的控制是基于各种前端元素的,在使用过程中,对于元素的定位是基础,只有准去抓取到对应元素 才能进行后续的自动化控制,我在这里将对selenium8种元 ...
- selenium元素定位之css选择器
在selenium元素定位时会用到css选择器选取元素,虽说xpath在定位元素时能解决大部分问题,但使用css选择器选取元素也是一种不错的选择. css相较与xpath选择元素优点如下: 表达式更加 ...
- java+selenium元素定位和元素操作
1.元素定位 ID定位元素: findElement(By.id(“”)); 通过元素的名称定位元素: findElement(By.name(“”)); 通过元素的html中的位置定位元素: fin ...
- Java + selenium 元素定位(5)之By Xpath
这篇关于Xpath方法的文章和之前那篇CSS的方法一样,使用前,需要先掌握一些Xpath的相关知识.当然,网上也有各种工具可以帮助我们获取到元素的Xpath,但是这并不代表着我们就可以不用了解Xpat ...
- Java + selenium 元素定位(4)之By CSS
这篇我要介绍元素定位的倒数第二个方法啦,就是基于CSS的元素定位.关于一些CSS的知识,我这里就不累赘的讲了,以后可能会单独写一篇关于CSS的介绍.当然个人推荐如果之前完全没有CSS只是储备的,可以选 ...
- Selenium+Java(三)Selenium元素定位
前言 使用Selenium做元素定位的时候,需要用到HTML的知识,所以最好是能懂得HTML的基本知识. 一.页面元素的查看(以百度为例) 打开IE浏览器,点击F12进入开发者模式,点击图中红圈圈中的 ...
- Java + selenium 元素定位(2)之By LinkText/PartialLinkText
本章介绍的两种方法都是对于网页上的文字链接的定位操作.根据名字,我们就可以看出来,这两者其实很相似,那么他们的不同在哪里呢. By LinkText()方法,是对一个的网页超链接,我们所需要输入的关键 ...
随机推荐
- 设置select,option文本居中
设置select,option文本居中 可以通过 padding 属性设置内边距,使它看上去居中: select{ # 从左到右依次表示上内边距,右内边距,下内边距,左内边距: padding :0 ...
- 用node.js做cluster,监听异常的邮件提醒服务
__ __ __ _ __ ____ ____ ____/ /__ _____/ /_ _______/ /____ _____ ___ ____ ___ ____ _(_) / / __ \/ __ ...
- numpy中array和asarray的区别
array和asarray都可以将结构数据转化为ndarray,但是主要区别就是当数据源是ndarray时,array仍然会copy出一个副本,占用新的内存,但asarray不会. 举例说明: imp ...
- u-boot中debug的一些总结
研究u-boot,首要搞清楚的是代码的流程,运行流程是什么样子的呢?不知道,就看log.这就要把log信息 打开.研究u-boot的文件,发现里面是很多DEBUG宏定义的打印,这个打印着怎么打开呢? ...
- ajax 请求被终止 chrome查询发现请求状态status为canceled
检查页面的network执行中发现页面被刷新了url改变了导致请求在请求过程中被终止了. 检查代码发现在 submit方法中最后写了个 location.reload();方法 来重载页面 虽然是卸 ...
- 安装Elasticsearch中Head插件并使用
基础环境 Elasticsearch集群搭建请参考前一篇文章http://www.cnblogs.com/aubin/p/8012840.html 系统 节点名 IP 软件版本 CentOS7.3 e ...
- Redis主从同步原理-SYNC【转】
和MySQL主从复制的原因一样,Redis虽然读取写入的速度都特别快,但是也会产生读压力特别大的情况.为了分担读压力,Redis支持主从复制,Redis的主从结构可以采用一主多从或者级联结构,下图为级 ...
- html和body的关系
1.chrome浏览器 从上面数据我们可以看出,html作为body的容器,其大小就是我们可视窗口的大小,window.innerHeight与html的clientHeight相同即可验证. 同时, ...
- 【PyTorch深度学习60分钟快速入门 】Part5:数据并行化
在本节中,我们将学习如何利用DataParallel使用多个GPU. 在PyTorch中使用多个GPU非常容易,你可以使用下面代码将模型放在GPU上: model.gpu() 然后,你可以将所有张 ...
- 细说移动端 经典的REM布局 与 新秀VW布局
和以往一样,本次项目也放到了 Github 中,欢迎围观 star ~ 1. 前言 2. 基本概念 3. REM布局 4. VW布局 实现单边边框1px 实现多边边框1px 实现边框圆角 实现容器固定 ...