Selenium基本用法以及元素定位
一、Selenium 简介
Selenium是ThroughtWorks公司一个强大的开源Web功能测试工具系列,提供一套测试函数,用于支持Web自动化测试。函数非常灵活,能够完成界面元素定位、窗口跳转、结果比较。他支持IE、Firefox、Safari、Chrome、Android手机浏览器,也支持Java、C#、Python、Ruby、PHP等语言,支持如Windows、Linux、IOS、Android等操作系统,是一套为web自动化测试量身定制的web框架, Selenium框架由多个工具组成,包括:Selenium IDE,Selenium RC,Selenium WebDriver和SeleniumRC,至于他们的功能和作用请大家自行百度脑补,下面将重点介绍selenium主要功能WebDriver。
二、selenium基本功能
1、浏览器并打开指定网页
WebDriver driver = newChromeDriver();//初始化Google浏览器对象
WebDriver driver = newFirefoxDriver();//初始化火狐浏览器
WebDriver driver = new InternetExplorerDriver();//初始化IE浏览器
driver.get(“www.baidu.com”)//打开百度页面
driver.close();//关闭当前页面
driver.quit();//关闭由selenium所启动的所有页面
备注:有些浏览器比如火狐并没有安装在默认路径,那么需要指定浏览器路径:System.setProperty("webdriver.firefox.bin","D:\\Program Files\\Mozilla Firefox\\firefox.exe");
2、浏览器操作
driver.navigate().back();//返回或向前
driver.navigate().forward();//向后
driver.navigate().refresh();//刷新
driver.manage().window().maxsize();//最大画窗口
String title = driver.getTitle(); //返回当前页面的Ttile
String currentUrl = driver.getCurrentUrl(); //返回当前页面的url
getPageSource() //返回当前页面的源码
getWindowHandle() //返回当前的浏览器的窗口句柄
getWindowHandles() //返回当前的浏览器的所有窗口句柄
备注:对于句柄等的介绍后续会有详细篇幅进行介绍,此处不做赘述
三、基本元素定位
a、单元素定位:
例子:
<button id="gbqfba" aria-label="Google Search" name="btnK" class="gbqfba sb_bs"><span id="gbqfsa">Google Search</span></button>
1、By.id(id) //用唯一属性id来定位非常推荐使用 优先级最高
2、By.name(name) //用name属性来定位也是非常高效的优先级仅次于id
3、By.linkText(linkText) //即通过超文本链接上的"文字信息"来定位元素,这种方式一般专门用于定位页面上的超文本链接:一般tag为<a>属性href=链接
4、By.partialLinkText(linkText) //适用于链接类的元素,模糊匹配,即包含herf属性的元素 ,同BylinkText()
5、By.className(className)) //对于元素的属性包含class的情况适用 <class = "src">
6、By.tagName(name) //通用定位方式,适用于层级定位,比如button就是一个tag 因此一般都会找出多条记录,需要在进行定位,通常用for循环
以上均为单元素定位,当然6一般定位的结果都是多个,其他的一般结果为1个。单元素定位的命令基本格式如下:
WebElemet element = driver.findElement(By.id("imageField"));
element.click();//点击
element.sendKeys("String");//输入
备注:有一个现象,就是复合类,即例子中的class="gbqfba sb_bs">,如果用driver.findElement(By.id("gbqfba sb_bs"))一定会报错,这种复合类必须用前面的或者后面的键值才能定位成功,即:driver.findElement(By.id("sb_bs"))or driver.findElement(By.id("gbqfba")),否则会报错,但是注意,如果class="gbqfba:sb_bs">这不是符合类,可以自行脑补一下css
b、多元素定位:
多元素定位其实是指定位的元素返回多个结果,一般会用List集合来存储结果,用for循环和if判断语句来找到自己需要的元素,比如用tagName定位,返回的结果就会多个如下:
List<WebElement> allInputs = driver.findElements(By.tagName("input"));//定位tagName为input的tag元素
for(WebElement element :allInputs){
if(element.getAttribute("type").equals("text")){
System.out.println(e.getText().toString()); //打印出每个文本框里的值
}
}
c、层级定位
层级定位,顾名思义,就按照层级关系进行定位,一般是应用于无法直接定位到需要定位的元素,所以采用先定位其父元素,在定位子元素的方式,一般用于表格或下拉框定位:
表格应用
WebElement table = driver.findElement(By.id("table"));
List <WebElement> rows = table.findElement(By.id("tr"));
下拉框应用
WebElement select = driver.findElement(By.name("select")); //
List<WebElement> selectvalue = a.findElements(By.tagName("option"));
for(WebElement value : selectvalue){
System.out.println(“value”+value.getText())
}
e、xpath定位
Xpath是一个非常强大的定位方式,几乎可以定位到所有数据,但是在我们学习Xpath定位之前,我们要知道明确两个概念,绝对路径&相对路径,绝对路径是以“/”开始的,
例如/body/buttononclick/input[1], 这就是绝对路径的表达形式,相反“相对路径”是以“//”开头的,比如//input[2],另外需要多说一句的是,当xpath的路径以"/"开头时,表示
让Xpath解析引擎从文档的根节点开始解析。当xpath路径以"//"开头时,则表示让xpath引擎从文档的任意符合的元素节点开始进行解析。而当/出现在xpath路径中时,则表示
寻找父节点的直接子节点,当"//"出现在xpath路径中时,表示寻找父节点下任意符合条件的子节点,不管嵌套了多少层级(这些下面都有例子,大家可以参照来试验)。弄清
这个原则,我们就可以灵活的使用 Xpaht进行定位了,下面还是看几个"栗子"吧
查找页面根元素://
查找页面上所有的input元素://input
查找页面上第一个form元素内的直接子input元素(即只包括form元素的下一级input元素,使用绝对路径表示,单/号)://form[1]/input
查找页面上第一个form元素内的所有子input元素(只要在form元素内的input都算,不管还嵌套了多少个其他标签,使用相对路径表示,双//号)://form[1]//input
查找页面上第一个form元素://form[1]
查找页面上id为loginForm的form元素://form[@id='loginForm']
查找页面上具有name属性为username的input元素://input[@name='username']
查找页面上id为loginForm的form元素下的第一个input元素://form[@id='loginForm']/input[1]
查找页面具有name属性为contiune并且type属性为button的input元素://input[@name='continue'][@type='button']
查找页面上id为loginForm的form元素下第4个input元素://form[@id='loginForm']/input[4]
查找页面上id是以“myid"开始/结尾关键字的元素://img[starts-with(@id,'myid')] //img[ends-with(@id,'myid')]
查找页面上id属性包含'g1'关键字的元素://img[contains(@id,'g1')]
查找页面上文本是“百度搜索”的所有元素://a[text()='百度搜索'] //a[contains(text(),"搜索")] --文本模糊定位
查找页面上input的最有一个元素://input[last()] 函数位置定位
a、通过路径定位
WebElement xpath = driver.findElement(By.xpath("html/body/div/form/input"));
WebElement xpath = driver.findElement(By.xpath("//input"))
b、通过索引定位
WebElement xpath = driver.findElement(By.xpath("//input[3]"));
c、通过属性定位
WebElement xpath = driver.findElement(By.xpath(""//*[@id='su' and @type='submit']""));
WebElement xpath = driver.findElement(By.xpath(""//*[@id='su'][type='submit']""));
d、文本属性定位
WebElement xpath = driver.findElement(By.xpath("//div[@class='qrcode-text']/p/b[text()='百度']"));
e、模糊匹配
WebElement xpath = driver.findElement(By.xpath("//input[starts-with(@id,'su')"));
WebElement xpath = driver.findElement(By.xpath("//input[ends-with(@id,'su')"));
WebElement xpath = driver.findElement(By.xpath("//input[contains(@id,'su')"));
WebElement xpath = driver.findElement(By.xpath(""//*[@id='su'][type='submit']""));
代码实例:WebElement xpath = driver.findElement(By.xpath("//form[@id='loginForm']"))
xpath定位就介绍这些,后续还会更新关于Cssselect、js定位、下拉框、单选/多选框、文本框、弹窗、句柄等,敬请关注
小技巧:
1.当页面元素有id属性时,最好尽量用id来定位。但由于现实项目中很多程序员其实写的代码并不规范,会缺少很多标准属性,这时就只有选择其他定位方法。
2.xpath很强悍,但定位性能不是很好,所以还是尽量少用。如果确实少数元素不好定位,可以选择xpath或cssSelector。如果自动化案例中使用大量的Xpath进行定位,你会发现你的脚本执行时间非常的长,慎用。
3.当要定位一组相同元素时,可以考虑用tagName或name。
4.当有链接需要定位时,可以考虑linkText或partialLinkText方式。
5.在进行定位的时候,尽量使用相对路径定位,如果使用绝对路径,那么一但页面结构变化,则无法使用原有的定位方式,但是相对路径就特别灵活,复用性高,也是项目中特别常用的方式
Selenium基本用法以及元素定位的更多相关文章
- 关于selenium的8种元素定位
selenium中有八种元素定位,分别是:id,name,class_name,tag_name,link_text.partial_link_text.xpath.css 简单的定位可以用 id.n ...
- Selenium webdriver 学习总结-元素定位
Selenium webdriver 学习总结-元素定位 webdriver提供了丰富的API,有多种定位策略:id,name,css选择器,xpath等,其中css选择器定位元素效率相比xpath要 ...
- [小北De编程手记] : Lesson 03 - Selenium For C# 之 元素定位
无论哪一种自动化测试的驱动框架(基于B/S,桌面应用,还是手机App).都应当具有一套优秀的元素定位技术.通常的自动化测试流程也可以简单的归结为是一个从被测试程序中识别或是定位元素以及执行操作和验证元 ...
- python + selenium相关事件和元素定位
女友由于工作上的失误,将公司RDM中的某一字段的2000条数据给删除了.....就算是重新添加字段,但是与其他数据的关联性已经不在了.由于每天的数据修改量大,有关部门不愿意恢复数据库,因此只能一条条的 ...
- selenium+python自动化之元素定位
自动化按步骤拆分的话,可以分为四步操作:定位元素,操作元素,获取返回结果,断言(返回结果与期望结果是否一致),最后自动出测试报告.本篇接下来讲基本的八种元素定位方法.说的通俗一点,就是教大家找对象. ...
- Selenium:八种元素定位方法
前言: 我们在做WEB自动化时,最根本的就是操作页面上的元素,首先我们要能找到这些元素,然后才能操作这些元素.工具或代码无法像我们测试人员一样用肉眼来分辨页面上的元素.那么我们怎么来定位他们呢? 在学 ...
- Selenium的WebDriver API元素定位中的XPath和CSS
元素的定位和操作是自动化测试的核心部分,其中操作又是建立在定位的基础上的. 浏览器的常规操作 import time from selenium import webdriver # 打开浏览器 dr ...
- java selenium webdriver实战 页面元素定位
自动化测试实施过程中,测试程序中常用的页面操作有三个步骤 1.定位网页上的页面元素,并存储到一个变量中 2.对变量中存储的页面元素进行操作,单击,下拉或者输入文字等 3.设定页面元素的操作值,比如,选 ...
- Selenium基础知识(元素定位的调试)
对一个不能直接定位的元素来说,调试是很常见的事,所以这里也简单总结了一下. 调试定位元素的工具很多,介绍也多,就不一一介绍了.下次有时间再补充.以下是我常用调试的方法(浏览器自带的控制台调试,仅介绍一 ...
随机推荐
- 设计模式-单例模式下对多例的思考(案例:Server服务器)
前述: 在学习单例模式后,对老师课上布置的课后作业,自然要使用单例模式,但是不是一般的单例,要求引起我的兴趣,案例是用服务器. 老师布置的要求是:服务器只有一个,但是使用这个服务器时候可以有多个对象( ...
- centos install redis
1. 下载 [logan@localhost java]$ wget http://download.redis.io/releases/redis-3.2.8.tar.gz2. 解压 [log ...
- autocomplete 属性 清除input框输入存留历史值,防止下拉历史值显示
autocomplete 属性规定输入字段是否应该启用自动完成功能. 自动完成允许浏览器预测对字段的输入.当用户在字段开始键入时,浏览器基于之前键入过的值,应该显示出在字段中填写的选项. 注释:aut ...
- vue学习笔记(一)
一.MVC 和 MVVM 的区别 MVC: Model(模型)应用程序中用于处理应用程序数据逻辑的部分(通常模型对象负责在数据库中存取数据). View(视图)显示数据(通常视图是依据模型数据创建的) ...
- <Android 应用 之路> 百度地图API使用(2)
简介 上一篇只是大致的提一下百度地图API的Android SDK的基本内容,然后抄袭一个官网上的Demo,今天看一下百度地图的第一部分,地图类型和基本的显示. 简单实战 不同类型地图的显示 //设置 ...
- 错误的git reset操作之后的补救措施
(相关命令:git reset.git log.git reflog,要看文档的话用--help.) 这是一次愚蠢的行为之后的总结……避免我之后忘记了解决方法[逃 get reset --hard是一 ...
- dubbo学习总结三 消费端
消费端跟服务端类似 注意点是dubbo:reference 和服务端的dubbo:service做区分 消费端主要是处理发送过来的请求
- SQL点点滴滴_删除临时表
select into 创建的表属于临时表,判断是否存在的方法 select c_adno,c_con_no into #temp from tb_contract IF OBJECT_ID( 'te ...
- MySQL案例02:ERROR 1221 (HY000): Incorrect usage of DB GRANT and GLOBAL PRIVILEGES
MySQL在授权用户时出现报错信息,具体信息如下: 一.错误信息 执行命令: GRANT SELECT,INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SH ...
- UIScrollView中的手势
UIScrollView中的手势 UIScrollView自带了两个手势,分别为: UIPanGestureRecognizer UIPinchGestureRecognizer 他们都是readon ...