元素定位-----Selenium快速入门(二)
一。eclipse设置
工欲善其事必先利其器,在说元素定位之前,先来设置下eclipse。
首先放大一下字体,点击windows-preferences

其次,eclipse对于java的智能提示默认是输入.才触发的,我们改为任意一个字母即可触发。
Java-Editor-Content Assist
在Auto activation triggers for java 输入:abcdefghijklmnopqrstuvwxyz. 注意,最后是有一点的"."

最后,我不想工具栏中有那么多图标

点击window-perspective-customize perspective即可设置

最后的效果

二。元素定位
Selenium对于有开发经验而又懂html,css,js的人来说,其实就是小菜一碟,只要手头有api文档,即可开始写代码。但对于什么都不懂的小白,难度有些大,上面说的html,css,js起码要懂一点,如果什么都不懂,建议先学学。
Selenium的api文档地址是:http://seleniumhq.github.io/selenium/docs/api/java/index.html 。都是英文,不过既然你要写代码,多多少少也得要啃一点英文,就算不太懂也没关系,不是很多网上即时翻译嘛。在本系列,我也将会翻译一些关键的说明。
这里说的元素,是指Selenium里的WebElement,api文档中的介绍是:Represents an HTML element。
意思就是说:这里的元素是指html里的元素,html里的元素简单说就是html标签,例如<p></p>
Selenium里查找元素的方法是:findElement(By by) 和 findElements(By by) ,前者返回一个元素,后者返回一组元素
findElement(By by)如果找到元素,会返回第一个符合要求的WebElement对象,如果找不到,则抛出”元素不存在“的异常NoSuchElementException
findElements(By by)则不会抛出异常,如果找到一组对象,会返回java.util.List<WebElement>,如果找不到,则返回空的列表。
而调用这两个方法都会使用到一个相同的对象,By,这个对象以下的静态方法,都是查找元素的依据。

例如,By.id("id"),是指通过id查找元素。例如,我们查看百度首页的html,得知,搜索框的ID是kw,回到我们的eclipse,输入以下代码
System.setProperty("webdriver.chrome.driver", "D:/WorkSpace/SeleniumTest/tools/chromedriver.exe");
WebDriver driver=new ChromeDriver();
driver.get("http://www.baidu.com");
driver.findElement(By.id("kw")).sendKeys("Selenium");
注意最后一句,driver.findElement(By.id("kw"))是查找id为kw的元素,后面的sendKeys("Selenium")是因为我们知道这是一个文本框,然后尝试在文本框内输入字符,以表示我们找到这个元素。如果id为"kw"的元素不存在的话,根据上面所说的,会抛出一个元素不存在的异常(NoSuchElementException)。例如,我们将id从"kw"改成"wk",执行一下,就可以看到以下结果

所以,当你不知道该元素是否存在的时候,必须考虑到元素不存在这种情况。
下面总结一下,查找的几种方法
| 方法 | 说明 | 举例 | 调用 |
| By.id | 通过id查找 | <p id="msg">ttttttt</p> | driver.findElement(By.id("msg")) |
| By.linkText | 通过链接文字查找 | <a href="http://www.baidu.com">百度</a> | driver.findElement(By.linkText("百度")) |
| By.partialLinkText | 通过部分链接文字查找 | <a href="http://www.baidu.com">百度</a> | driver.findElement(By.partialLinkText("百")) |
| By.name | 通过name查找 | <p name="myname">tttttttt</p> | driver.findElement(By.name("myname")) |
| By.tagName | 通过标签名查找 | <p>tttttttt</p> | driver.findElement(By.tagName("p")) |
| By.xpath | 通过xpath查找 | <p>ttttttt</p> | driver.findElement(By.xpath("/p")) |
| By.cssName | 通过css名查找 | <p class="normal-text">ttttttt</p> | driver.findElement(By.cssName("normal-text")) |
| By.cssSelector | 通过css选择器查找 | <p id="msg">ttttttttt</p> | driver.findElement(By.cssSelector("#msg")) |
如果懂得html和css,上面的说明都是非常清楚,如果不懂的,还需要自学一下。
cssSelector的说明:http://www.w3school.com.cn/cssref/css_selectors.asp
xpath的说明:http://www.w3school.com.cn/xpath/index.asp
这些其实都不用死记硬背,目前的浏览器,几乎都有调试工具,可以找出任一个元素的xpath和css选择器。
例如,chrome,按F12,即可跳出调试工具,如下图

元素定位-----Selenium快速入门(二)的更多相关文章
- Appium自动化(9) - appium元素定位的快速入门
如果你还想从头学起Appium,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1693896.html 快速入门栗子:boss直聘 app ...
- 元素(WebElement)-----Selenium快速入门(三)
上一篇<元素定位-----Selenium快速入门(二)>说了,如何定位元素,本篇说说找到的元素(WebElement)该怎么用. WebElement常用方法: 返回值 方法名 说 ...
- 隐式等待-----Selenium快速入门(九)
有时候,网页未加载完成,或加载失败,但是我们后续的代码就已经开始查找页面上的元素了,这通常将导致查找元素失败.在本系列Selenium窗口切换-----Selenium快速入门(六)中,我们就已经出现 ...
- 显式等待-----Selenium快速入门(十)
上一篇说了元素定位过程中的隐式等待,今天我们来探讨一下显示等待.显式等待,其实就是在使用WebDriverWait这个对象,进行等待.显式等待对比隐式等待,多了一些人性化的设置,可以说是更细化的隐式等 ...
- Selenium框架切换-----Selenium快速入门(七)
上一篇说了窗口的切换,本篇说说框架的切换. 切换框架:是指切换html中的iframe标签元素或者frame标签元素,注意,并不包括frameset 以下是常用的方法: 方法 说明 WebDriver ...
- python3.5+django2.0快速入门(二)
昨天写了python3.5+django2.0快速入门(一)今天将讲解配置数据库,创建模型,还有admin的后台管理. 配置数据库 我们打开mysite/mysite/settings.py这个文件. ...
- selenium之元素定位的方法(二)
XPath定位是XML Path的缩写,称为XML路径语言,是在XML文档中查找信息的一种语言,可用来再XML文档中对元素和属性进行搜索.XPath使用路径表达式来选取XML文档中的节点或节点集. X ...
- 截图-----Selenium快速入门(十二)
在自动化测试过程中,截图是常见的操作,因为有时候单靠程序无法判断是否已得到期望的结果,所以需要截图判断.又或者截图是作为判断的存证.Selenium的截图操作也是非常简单,而且自带了一个文件操作类Fi ...
- Selenium下拉菜单(Select)的操作-----Selenium快速入门(五)
对于一般元素的操作,我们只要掌握本系列的第二,三章即可大致足够.对于下拉菜单(Select)的操作,Selenium有专门的类Select进行处理.文档地址为:http://seleniumhq.gi ...
随机推荐
- 痞子衡随笔:常用的数据传输差错检测技术(1)- 奇偶校验(Parity Check)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家讲的是嵌入式数据传输里的差错检测技术-奇偶校验. 在嵌入式应用里,除了最核心的数据处理外,我们还会经常和数据传输打交道.数据传输需要硬件传输接口 ...
- 解决无法make uImage的问题
进入一个uboot目录, 执行make distclean make at91sam9260ek_config make ARCH=arm CROSS_COMPILE=arm-linux- cp to ...
- 试着把.net的GC讲清楚(1)
什么是GC? GC(garbage collection)是对内存管理中回收已经不用的内存的一种机制,我们熟知的java和.net都有自己的GC机制,是内存管理的一部分. 为什么会有GC呢?是因为动态 ...
- Vue.js依赖收集
写在前面 因为对Vue.js很感兴趣,而且平时工作的技术栈也是Vue.js,这几个月花了些时间研究学习了一下Vue.js源码,并做了总结与输出.文章的原地址:https://github.com/an ...
- JQuery坑,说说哪些大家都踩过的坑
1 乱用选择器 坑人指数:200 JQuery选择器调用代价很大,反复调用效率更低.应采用缓存对象的方法或采用链式调用的方式. //错误的写法 $("#button").click ...
- ubuntu命令行下java工程编辑与算法(第四版)环境配置
ubuntu命令行下java工程编辑与算法(第四版)环境配置 java 命令行 javac java 在学习算法(第四版)中的实例时,因需要安装配套的java编译环境,可是在编译java文件的时候总是 ...
- PHP结合Redis来限制用户或者IP某个时间段内访问的次数
$redis = new Redis(); $redis->connect('127.0.0.1', 6379); //获取客户端真实ip地址 function get_real_ip(){ s ...
- qml 静态编译程序执行错误 无法定位程序输入点 CreateDXGIFactory2 于动态链接库 dxgi.dll 上
重新编译 qt 静态库即可,或 删除该动态库. -no-feature-d3d12 解决方案请参考如下网址: https://forum.qt.io/topic/78380/entry-point-n ...
- 决策树-C4.5算法(三)
在上述两篇的文章中主要讲述了决策树的基础,但是在实际的应用中经常用到C4.5算法,C4.5算法是以ID3算法为基础,他在ID3算法上做了如下的改进: 1) 用信息增益率来选择属性,克服了用信息增益选择 ...
- 【视频编解码·学习笔记】8. 熵编码算法:基本算法列举 & 指数哥伦布编码
一.H.264中的熵编码基本方法: 熵编码具有消除数据之间统计冗余的功能,在编码端作为最后一道工序,将语法元素写入输出码流 熵解码作为解码过程的第一步,将码流解析出语法元素供后续步骤重建图像使用 在H ...