java-selenium定位元素和操作元素
八种定位方式
一、ID定位
一般情况下页面元素的id属性在当前网页中是唯一的所以使用ID定位可以保证定位的唯一性,不会像其他定位方式一样可能定位到多个页面元素。但有的网页页面元素没有id属性值,导致无法使用ID定位方式。
HTML 源码
<a onclick="return false;" id="lb" name="tj_login" href="https://passport.baidu.com/v2/?login&tpl=mn&">登录</a>
Java代码
WebElement element = driver.findElement(By. id("lb"));
二、name定位
name属性值在一个网页中可以不是唯一值,因此使用name方式定位可能会同时定位到多个元素。
HTML 源码
<a onclick="return false;" id="lb" name="tj_login" href="https://passport.baidu.com/v2/?login&">登录</a>
java代码
WebElement element=driver.findElement(By.name("tj_login"));
三、className定位
classname定位可以查找一个或者一组显示效果相同的页面元素。
HTML 源码
<a class="reg" href="https://passport.baidu.com/v2/?reg&u=http%3A%2F%2Fwww.baidu.com%2F">注册</a>
java代码
WebElement element = driver.findElement(By.className( "reg"));
四、linkText定位(链接全部文字)
此方式定位链接需要完全匹配链接的显示文字,常用于页面中存在多个链接文字高度相似的情况,无法使用部分链接文字定位。
HTML 源码
<a name="tj_setting" href="http://www.baidu.com/gaoji/preferences.html">搜索设置</a>
java代码
WebElement element = driver.findElement(By.linkText( "搜索设置" ));
五、partialLinkText定位(链接部分文字)
这种定位方式只需模糊匹配链接的显示文字即可,常用于匹配页面链接文字不定期发生少量变化的情况,使用模糊匹配的方式可以提高链接定位的准确率,也可以用于模糊匹配一组链接的情况。
HTML 源码
<a href="http://www.sogou.com">sogou搜索</a><br>
<a href="http://www.baidu.com">baidu搜索</a>
Java代码
WebElement element = driver.findElement(By. partialLinkText( "baidu" ));
List<WebElement> elements=driver.findelement(By.partialLinkText("搜索"));
六、tagname定位(标签名称定位)
标签名定位方式主要用于匹配多个页面元素的情况,将找到的页面元素对象进行计数、遍历。。。
HTML 源码
<a name="tj_setting" href="http://www.baidu.com/gaoji/preferences.html">搜索设置</a>
<a href="http://www.baidu.com">baidu搜索</a>
Java代码
WebElement element=driver.findElement(By.tagName("a"));
List<WebElement> elements= driver.findElement(By.tagName(a));
七、XPath定位(这里讲述的XPath例子全部是相对路径定位)
HTML源码
<html>
<head>
<title>SeleniumElement</title>
<meta http-equiv=Content-Type content="text/html;charset=utf-8">
<meta http-equiv=X-UA-Compatible content="IE=edge,chrome=1">
<meta content=always name=referrer>
</head>
<body>
<div id='sousuo'>
<a href="http://www.sogou.com">sogou搜索</a><br>
<a href="http://www.baidu.com">baidu搜索</a>
</div>
<br>
<div id='ifra' >
<td>Input输入框</td>
<input type="text" id="input" name='ips'/>
</div>
</br>
<div id='radio'>
<td>RadioBox单选框</td></br>
<input type='radio' name="fruit" class='yi'/><label>yi</label></br>
<input type='radio' name="fruit" class='er'/><label>er</label></br>
<input type='radio' name="fruit" class='san'/><label>san</label></br>
<input type='radio' name="fruit" class='si'/><label>si</label></br>
<input type='radio' name="fruit" class='wu'/><label>wu</label>
</div>
<br> </body>
</html>
1.使用索引号进行定位,从 1 开始。
java代码
//通过索引号定位到第2个radio按钮
WebElement element=driver.findElement(By.xpath("//input[2]"));
2.使用元素属性值定位
网页的元素通常包含各种各样的属性值,并且很多属性值具有唯一性若能确认属性值发生变更的可能性很低且具有唯一值,则推荐使用元素属性值定位的方法来编写XPath定位表达式
java代码
//使用class属性定位到值为 yi 的按钮
WebElement yi=driver.findElement(By.xpath("//input[@class='yi']"));
//定位到id属性值为sousuo的div中href属性值为http://www.baidu.com 链接
WebElement ss=driver.findElement(By.xpath("//div[@id='sousuo']/a[@href='http://www.baidu.com']"));
//使用type属性值定位输入框
WebElement t=driver.findElement(By.xpath("//input[@type='text']"));
3.使用模糊的属性值定位
自动化实施过程中,会遇到页面元素属性值动态的生成,即每次刷新后元素属性值都会变动。使用模糊的属性值定位方式可解决一部分此类难题。使用的方法为一下两个:
> starts-with()
> contains()
java代码
//查找输入框id属性开始位置包含“in”关键字的页面元素
WebElement in=driver.findElement(By.xpath("//input[starts-with(@id,'in')]"));
//查找链接href属性包含“baidu”关键字的页面元素
WebElement bu=driver.findElement(By.xpath("//a[contains(@href,'baidu')]"));
4.使用页面元素的文本来定位
java代码
//查找元素文本为 baidu搜索 的链接
WebElement bd=driver.findElement(By.xpath("//a[text()='baidu搜索']"));
//搜索包含 sogou 的连链接
WebElement sg=driver.findElement(By.xpath("//a[contains(text(),'sogou')]"));
5.使用XPath的轴(Axis)进行元素定位
使用XPath轴方式依据在文档树种的元素相对位置关系进行定位。先找到一个相对好定位的元素,依据它和要定位元素的相对位置进行定位,可解决一些元素难以定位的问题。提供的XPath轴关键字为一下几种:
① parent:选择当前节点的上层父节点
② child:选择当前节点的下层子节点
③ ancestor:选择当前节点所有上层的节点
④ descestor:选择当前节点所有上层的节点
⑤ following:选择在当前节点之后显示的所有节点
⑥ following-sibling:选择当前节点的所有平级节点
⑦ preceding:选择当前节点前面的所有节点
⑧ preceding-sibling:选择当前节点前面的所有同级节点
八、CSS定位(CSS定位和XPath定位方式类似,也没有学习。这里就不做介绍了。。。。。。)
java-selenium定位元素和操作元素的更多相关文章
- 《手把手教你》系列技巧篇(七十一)-java+ selenium自动化测试-自定义类解决元素同步问题(详解教程)
1.简介 前面宏哥介绍了几种关于时间等待的方法,也提到了,在实际自动化测试脚本开发过程,百分之90的报错是和元素因为时间不同步而发生报错.本文介绍如何新建一个自定义的类库来解决这个元素同步问题.这样, ...
- java selenium webdriver处理JS操作窗口滚动条
未经作者允许,禁止转载!!! java selenium webdriver处理JS操作窗口滚动条 java selenium webdriver处理JS操作窗口滚动条 import org.open ...
- java selenium (九) 常见web UI 元素操作 及API使用
本篇介绍我们如何利用selenium 来操作各种页面元素 阅读目录 链接(link) <div> <p>链接 link</p> <a href=" ...
- java selenium webdriver第二讲 页面元素定位
自动化测试实施过程中,测试程序中常用的页面操作有三个步骤 1.定位网页上的页面元素,并存储到一个变量中 2.对变量中存储的页面元素进行操作,单击,下拉或者输入文字等 3.设定页面元素的操作值,比如,选 ...
- Selenium定位不到指定元素原因之iframe(unable to locate element)
浏览过程中,图片中的内容可能太小,无法看清,可以>右键>在新标签中打开 Outline 项目原因,需要用selenium实现模拟登陆.模拟上传文件,自然就需要模拟点击[上传]按钮: 模拟点 ...
- Selenium(八):其他操作元素的方法、冻结界面、弹出对话框、开发技巧
1. 其他操作元素的方法 之前我们对web元素做的操作主要是:选择元素,然后点击元素或者输入字符串. 还有没有其他的操作了呢?有. 比如:比如鼠标右键点击.双击.移动鼠标到某个元素.鼠标拖拽等. 这些 ...
- Selenium定位二 --多个元素定位方法 和层级定位方法
定位多个元素: findElements()方法可以返回一个符合条件的元素List 组 如: public void hitUpdatePersonnel(WebDriver driver, int ...
- Appium1.6 定位iOS元素和操作元素
元素定位方式 第一种:通过Appium1.6的Inspector来查看 具体安装方式前面的随笔已经介绍了:http://www.cnblogs.com/meitian/p/7360017.html ...
- selenium中如何保证操作元素的成功率?也就是说如何保证我点击的元素一定是可以点击的?
1.在寻找元素时,加上显示等待或者隐式等待,这样在对元素进行操作之前保证元素被找到,进而提高成功率: 2.在对元素操作之前,比如click,如果该元素未display(非hidden),就需要先滚动到 ...
随机推荐
- 利用栈实现字符串中三种括号的匹配问题c++语言实现
编写一个算法,检查一个程序中的花括号,方括号和圆括号是否配对,若能够全部配对则返回1,否则返回0. Head.h: #ifndef HEAD_H_INCLUDED #define HEAD_H_INC ...
- TensorFlow使用记录 (九): 模型保存与恢复
模型文件 tensorflow 训练保存的模型注意包含两个部分:网络结构和参数值. .meta .meta 文件以 “protocol buffer”格式保存了整个模型的结构图,模型上定义的操作等信息 ...
- vue-cli3项目打包后,在自己搭的服务器上访问打包好的页面空白,处理方法
我用vue开发的一个小项目,项目开发出雏形,想打包一下放测试,但是我想放测试前自己检查一下经过npm run build打包生成的项目,在本地服务器能不能正常跑,于是,经过网上大哥的帮忙,写了个简易的 ...
- Vue 新手学习笔记:vue-element-admin 之安装,配置及入门开发
所属专栏: Vue 开发学习进步 说实话都是逼出来的,对于前端没干过ES6都不会的人,vue视频也就看了基础的一些但没办法,接下来做微服务架构,前端就用 vue,这块你负责....说多了都是泪,脚手架 ...
- 微信小程序_(校园视)开发视频的展示页_上
微信小程序_(校园视) 开发用户注册登陆 传送门 微信小程序_(校园视) 开发上传视频业务 传送门 微信小程序_(校园视) 开发视频的展示页-上 传送门 微信小程序_(校园视) 开发视频的展示页-下 ...
- 3 Java 冒泡排序法
冒泡排序( Bubble Sort)是一种简单的排序算法.它重复访问要数列, 一次比较两个元素,如果他们的顺序错误就把交换过来.访问数列工作是 一次比较两个元素,如果他们的顺序错误就把交换过来.访问数 ...
- LeetCode 147. 对链表进行插入排序(Insertion Sort List)
题目描述 对链表进行插入排序. 插入排序的动画演示如上.从第一个元素开始,该链表可以被认为已经部分排序(用黑色表示). 每次迭代时,从输入数据中移除一个元素(用红色表示),并原地将其插入到已排好序的链 ...
- 黑马vue---13、事件修饰符的介绍
黑马vue---13.事件修饰符的介绍 一.总结 一句话总结: .stop 阻止冒泡:input type="button" value="戳他" @click ...
- C++学习 之 初识命名空间
声明: 本人自学C++, 没有计算机基础,在学习的过程难免会出现理解错误,出现风马牛不相及的现象,甚至有可能会贻笑大方. 如果有幸C++大牛能够扫到本人的博客,诚心希望大牛能给予 ...
- mongdb group聚合操作
1.数据准备 [{"goods_id":1,"cat_id":4,"goods_name":"KD876"," ...