Selenium_WebDriver_定位元素
版权声明:本文为博主原创文章,转载请注明出处。
定位单个元素
WebDriver提供了八种元素定位方法,Java中定位语句形如:driver.findElement(By.id());
何为元素定位?当我们使用百度进行信息搜索时,打开网址后,我们的眼睛会聚焦到搜索栏,然后在搜索栏中输入我们需要搜索的关键,然后点击“百度一下”按钮,从上面的描述中我们可以看到,要完成搜索我们必须找到“搜索栏 && 百度一下按钮”,我们有眼睛可以浏览页面去定位“搜索栏 && 百度一下按钮”的位置,那脚本怎么知道“搜索栏 && 百度一下按钮”在哪里呢,这就要用到元素定位方法,通过元素定位,相当于给浏览器驱动器安装了一双眼睛,这样就可以找到“搜索栏 && 百度一下按钮”的“位置”了;
|
元素定位方式 |
描述 |
示例及场景 |
|
id |
HTML规定id属性在HTML文档中必须是唯一的,这就类似于公民的身份证号,具有很强的唯一性。 |
示例:定位"百度一下"按钮,并点击; 语法: driver.findElement(By.id("su")).click(); 场景: <input type="submit" value="百度一下" id="su" class="btn self-btn bg s_btn"> |
|
name |
HTML规定name来指定元素的名称,因此它的作用更像是人的姓名。name的属性值,在当前页而中可以不唯一。 |
示例:定位"百度搜索首页”的输入框,并输入"Selenium"; 语法:driver.findElement(By.name("wd")).sendKeys("Selenium"); 场景:<input type="text" class="s_ipt" name="wd" id="kw" maxlength="100" autocomplete="off"> |
|
class name |
HTML规定class来指定元素的类名。 其用法与id、name类似。 |
示例:定位"百度一下"按钮,并点击; 语法:driver.findElement(By.className("btn self-btn bg s_btn")).click(); 场景: <input type="submit" value="百度一下" id="su" class="btn self-btn bg s_btn"> |
|
tag name |
HTML的本质就是通过tag来定义实现不同的功能,每一个元素本质上也是一个tag。因为一个tag往往用来定义一类功能,所以通过tag识别某个元素的概率很低。 |
语法1:driver.findElement(By.tagName("input")); 示例2:查找页面上有多少个input,就可以用input这个tagName来进行查找 语法2:List<WebElement> inputs = driver.findElements(By.tagName("input")); System.out.println(inputs.size()); |
|
link text |
专门用来定位文本链接 |
示例:定位"百度搜索主页"右上角的"新闻"文本链接,并点击; 语法:driver.findElement(By.linkText("新闻")).click(); 场景:<a href="http://news.baidu.com" target="_blank" class="mnav">新闻</a> |
|
partial link text [ˈpɑ:ʃl] |
parial link定位是对link定位的一种补充,有些文本链接会比较长,这个时候我们可以取文本链接的一部分定位,只要这一部分信息可以唯一地标识这个链接即可。 |
示例:定位"百度搜索主页"右上角的"更多产品"文本链接,并点击; 语法:driver.findElement(By.partialLinkText("更多产")).click(); 场景:<a href="http://www.baidu.com/more/" name="tj_briicon" class="s_bri" target="_blank"> 更多产品</a> |
|
xpath |
XPath是一种在XML文档中定位元素的语言。 这种方法几乎可以定位到页面上的任意元素。 还可直接使用find_element_by_xpath()方法来定位元素。 |
|
|
①绝对路径 |
XPath主要用标签名的层级关系来定位元素的绝对路径,最外层为html语言。有body文本内,一级一级往下查找,如果一个层级下有多个相同的标签名,那么就按上下顺序确定是第几个,例如div[2]表示当前层级下的第二个div标签。 |
|
|
②相对路径 (需要学习Xpath定位语法) |
示例:定位"百度一下"按钮,并点击; 语法:driver.findElement(By.xpath("//*[@id='su']")).click(); 场景:利用谷歌F12中自带的“Copy XPath”,获取到“百度一下”按钮的XPath路径; |
|
|
css selector |
CSS使用选择器来为页面元素绑定属性。 CSS可以较为灵活地选择控件的任意属性,一般情况下定位速度要比XPath快。 |
|
|
选择器(利用谷歌F12中自带的“Copy Selector”) |
||
|
#id id 选择器,选择id="***'的所有元素; |
示例:定位"百度一下"按钮,并点击; 语法:driver.findElement(By.cssSelector("#su")).click(); 场景:<input type="submit" value="百度一下" id="su" class="btn self-btn bg s_btn"> |
|
|
.class class 选择器,选择class="***"的所有元素; |
示例:定位"百度一下"按钮,并点击; 语法:driver.findElement(By.cssSelector(".btn self-btn bg s_btn")).click(); 场景:<input type="submit" value="百度一下" id="su" class="btn self-btn bg s_btn"> |
|
|
* |
选择所有元素 |
|
|
element |
选择所有<element>元素 |
|
|
element1 > element2 |
选择父元素为<element1 >的所有<element2>元素 |
|
|
element1 + element2 |
选择同一级中紧接在<element1>元素之后的所有<element2>元素 |
|
|
[attribute=value] |
选择target = value的所有元素 |
|
定位一组元素
定位一组元素的方法与定位单个元素的方法类似,唯一的区别是在单词 element 后面多了一个 s 表示复数。定位一组元素一般用于以下场景:
①批量操作元素,例如勾选页面上所有的复选框。
②先获取一组元素,再从这组对象中过滤出需要操作的元素。例如定位出页面上所有的 checkbox,然后选择其中的一个进行操作。
注:对获取到的获取到的元素进行操作时,操作页面不能有跳转,否则会出现页面失效错误“stale element reference: element is not attached to the page document”
|
findElements() |
原型 |
java.util.List<WebElement> findElements(By by) |
|
参数 |
和findElement的可取的参数是一样的; |
|
|
返回值 |
返回一个装有WebElement的List容器; 因此,可以使用Java中关于List相关的方法,如:size()获取webelement的个数; |
|
|
示例 |
示例说明:登录cnblog,并为"精华"页面的前2篇博文点击"推荐"; 关键语法: ①List<WebElement> elements = driver.findElements(By.className("diggit")); //定位所有的“推荐”按钮; ②element = elements.get(i);//获取单个博文的“推荐”按钮,用到了Java循环For语句,List的get()方法; ③element.click(); //点击“推荐”按钮; |
附上测试代码:
|
测试环境: ①Eclipse:jee-mars-4.5.2 ②Selenium:selenium-java-3.5.3 ③GoogleChrome:60 ④chromedriver:2.30; |
package com.SeleniumLib.jase; |
Selenium_WebDriver_定位元素的更多相关文章
- selenium定位元素(本内容从https://my.oschina.net/flashsword/blog/147334处转载)
注明:本内容从https://my.oschina.net/flashsword/blog/147334处转载. 在使用selenium webdriver进行元素定位时,通常使用findElemen ...
- Web自动化基础(一)使用Selenium定位元素
什么是元素?我们知道网页上有什么内容显示出来,比如一个按钮,一个输入框,一张图片,都可以理解成元素,这些元素是由html代码构成的,比如图片可以用<img>标签来展示,一个输入框可以用&l ...
- Appium学习路—Android定位元素与操作
一.常用识别元素的工具 uiautomator:Android SDK自带的一个工具,在tools目录下 monitor:Android SDK自带的一个工具,在tools目录下 Appium Ins ...
- webdriver中定位元素,报无法找到元素的问题
webdriver中定位元素,报无法找到元素的问题时,需要查看以下几点: 1 用火狐的firebug插件定位元素,确保这个元素的定位正确: 2 在火狐的firebug插件的,在html页签中输入fra ...
- WebDriver定位元素方法
如果把页面上的元素看作人的话,在现实世界如何找到某人呢?方法有三: 一.通过人本身的属性,例如他的姓名,手机号,身份证号,性别,这些可区别他人的属性.在web页面上的元素也有这些属性,例如,id.na ...
- Selenium2+python自动化8-SeleniumBuilder辅助定位元素
前言 福利来了,对于用火狐浏览器的小伙伴们,你还在为定位元素而烦恼嘛? 上古神器Selenium Builder来啦,哪里不会点哪里,妈妈再也不用担心我的定位元素问题啦!(但是也不是万能,基本上都能覆 ...
- appium关于定位元素
Windows上定位元素我用的是uiautomatorviewer 这个工具在你的SDK-tools目录下,点击uiautomatorviewer.bat启动,注意appium在跑的时候是取不到的 工 ...
- css读书笔记3:定位元素
定位元素要掌握css技术,核心就是要掌握元素定位. 一般把下面这条规则作为所有css样式表的第一条,初始化所有元素的内边距和外边距都为0: * {padding:0;margin:0;} 盒模型浏览器 ...
- 总结Selenium自动化测试方法(三)WebDriver定位元素方法
三.WebDriver定位元素 推荐使用的webdriver是firefox,因为他的firebug更能可以帮助定位页面元素使用 # create a new Firefox session cls. ...
随机推荐
- 010 有顺序的Map的实现类:TreeMap和LinkedHashMap
作者:nnngu GitHub:https://github.com/nnngu 博客园:http://www.cnblogs.com/nnngu 简书:https://www.jianshu.com ...
- JavaScript八张思维导图—基本概念
JS基本概念 JS操作符 JS基本语句 JS数组用法 Date用法 JS字符串用法 JS编程风格 JS编程实践 不知不觉做前端已经五年多了,无论是从最初的jQuery还是现在火热的Angular,Vu ...
- 【深度学习系列】PaddlePaddle可视化之VisualDL
上篇文章我们讲了如何对模型进行可视化,用的keras手动绘图输出CNN训练的中途结果,本篇文章将讲述如何用PaddlePaddle新开源的VisualDL来进行可视化.在讲VisualDL之前,我们先 ...
- 怎么知道我的laravel 是几版本的
方法1: 使用php artisan --version ,只要能看懂这个命令的人一定已经具有初步的Laravel知识. 再介绍一种不需要命令,直接去文件中去查看的方法. 方法2: 在项目文件中找ve ...
- 更改dede网站地图模板样式
dedecms后台可以生成2个地图,一个是网站地图,html格式的,一个是rss地图,同样默认这2个地图生成之后也会有底部的dedecms版权声明,这个时候我们需要分别更改这2个模板才可以去掉底部的版 ...
- DEDECMS开启邮箱验证通知的解决方法
[摘要]织梦CMS是开源内容管理系统,是国内开源CMS的领先品牌,目前程序安装量已达七十万,本文介绍DEDECMS会员注册时,开启邮箱验证通知的解决方法. 在论坛上看到很多人都说这个功能没用,邮箱根本 ...
- Aliase_小白学Python_Day0_前言
听到有老师介绍,说你为什么不把你的学习过程保存下来,一是当做总结,二是作为分享.我想,也对.这算是我的第一个博客,本次想写写我为什么选择学习Python. 很多人都问过我一个问题,行业那么多,你为什么 ...
- As a Start - 毫厘之间,宇宙之外
序 突然想聊聊多重宇宙——多重宇宙,这听上去像是一个科幻概念,但是严肃思考这一个问题时,将会带我们进入一个全新的格局和世界. 对宇宙学家而言,研究多重宇宙并不仅仅是为了猜测平行世界里某一历史事件是否有 ...
- WatchKit编程指南:Watch Apps--文本、标签以及图片
文本和分类标签 为了在Watch app中展示文本,使用标签对象.分类标签支持格式化的文本,可以在运行时被程序修改. 要添加标签到界面控制器,可以把它拖到对应的故事版场景(storyboard),在这 ...
- intern
java.lang.String的intern()方法"abc".intern()方法的返回值还是字符串"abc",表面上看起来好像这个方 法没什么用处.但实际 ...