------Web自动化测试之Webdriver+TestNG--从零到熟练(系列)javascript
WebDriver也就是业界通称的Selenium 2.0,是页面自动化的通用框架,支持java, python, php等多种语言。也是其余自动化,如手机自动化化的基础。官方出了一个帮助文档,详细讲解了Webdriver Java API的相关操做,本章咱们就不一一讲述了,把经常使用的给讲解一下,为后续的章节作准备。php
在对页面进行测试以前,咱们须要在特定的浏览器中打开咱们要测试的页面。Webdriver支持多种浏览器,经常使用的打开方法以下:css
(1)打开firefox浏览器:java
WebDriver driver=new FirefoxDriver();python
(2)打开IE浏览器:编程
WebDriver driver=new InternetExplorerDriver();浏览器
(3)打开HtmlUnit浏览器:框架
WebDriver driver=new HtmlUnitDriver()工具
说明:运行这段代码,能够打开对应的浏览器,firefox和IE浏览器自没必要说,很经常使用的两个浏览器。至于HtmlUnitDriver这个你们就不常见了,这是一个内存级运行的驱动浏览器。测试用例在内存中运行,不会打开页面,运行速度比较快,可是也有缺点若是程序出错,不能直观地看到错误的现象。对javascript支持很差,若是页面包含太多的JS,常常会捕捉不到页面元素。测试
(4)打开要测试的URL
Driver.get(URL);
要完成对页面元素进行操做,首先要先定位到这个页面元素,一般经常使用的页面元素定位方法有以下几种:
(1)经过ID定位
例如:页面有以下元素:
要对这个元素进行定位,则能够利用下面的语句:
WebElement element=driver.findElement(By.id(“password”));
(2)经过name定位
例如:页面元素以下:
要定位这个元素,可使用下面的语句:
WebElement element=driver.findElement(By.name(“username”));
(3)经过xpath定位
例如:有以下的页面元素:
要定位img标签,则须要下面的Xpath定位语句:
WebElement element=driver.findElement(By.xpath(“//a[@class=’sitelogo’]/img”));
(4)经过class name定位
例如:仍是个这页面元素:
不过咱们此时要定位的是a标签,则定位语句以下:
WebElement element=driver.findElement(By.className(“sitelogo”));
(5)经过linkText定位
例如:有页面元素以下:
www.zhongchou.com”> 筹小钱办大事
则定位这个元素的时候,咱们能够用如下方法:
WebElement element=driver.findElement(By.linkText(“筹小钱办大事”));
(6)经过Css定位
例如,有以下页面元素:
则定位这个元素的时候,咱们能够用如下方法:
WebElement element=driver.findElement(By.cssSelector(“input#kw.s_ipt”));
经常使用的定位方法就这六种,不过经过一个页面元素可使用不止一种定位方法,因此此时咱们就要选择合适的定位方法来编写咱们的测试用例。
虽然在一个页面上的元素不少,但是咱们经常使用的操做就那么几个元素,操做方法也是有限的,下面咱们介绍一下经常使用元素的操做,咱们之后的测试用例就是由这些儿操做组成的。
(1) 输入框(input)
A,查找输入框元素:
WebElement element=driver.findElement(By.id(“password”));
B,向输入框内输入内容:
element.sendKeys(“HelloWorld!”);
C,清空输入框内容:
element.clear();
D,获取输入框中的内容:
element.getText();
(2)按钮(button)
A,定位按钮
Webdriver savebtn=driver.findElement(By.id(“save”));
B,点击按钮:
savebtn.click();
C,判断按钮是否可点击:
savebtn.isEnabled()
(3)下拉选择框(Select)
A,定位下拉选择框:
Select select=new Select(driver.findElement(By.id(“select”)));
B,选择对应的选择项:
select.selectByVisibleText(“item1”);
or
select.selectByValue(“item1”);
C,不选择对应的项
select.deselectAll();
select.deselectByValue(“item1”);
select.deselectByVisibleText(“item1”);
D,获取选择项的值
select.getAllSelectedOptions();
select.getFirstSelectedOptiion();
(4)单选按钮(Radio Button)
A,定位单选框元素
WebElement sexsel=driver.findElement(By.id(“sex”));
B,选择单选按钮
sexsel.click();
C,清空某个单选项:
sexsel.clear();
D,判断选项目是否已选中:
sexsel.isSelected();
(5)复选按钮
A,定位单选框元素
WebElement city=driver.findElement(By.id(“city”));
B,选择复选框
city.click();
C,清空某个选项:
city.clear(); or city.click();
D,判断选项目是否已选中:
city.isSelected();
(6)窗口与Frame间的切换
A,先切换到默认句柄
driver.switchTo().defaultContent();
B,切换到Frame:
driver.switchTo().frame(“frame1”);
C,切换到Window:
driver.switchTo().window(“windowName”);
注:在咱们平常的自动化测试中,常常会遇到,这种切换,若是咱们忘记了写切换语句,则会出现咱们用定位工具明明能找到的元素,在自动化测试用例中一直报找不到的错误。此时,不用反复更改定位方式,只须要看一下操做过程当中是否改变了窗口或是进入了frame中。
页 面元素的定位,是页面自动化测试过程当中的首要任务及重中之重。若是连元素都定位不到,再好的测试框架,高超的编程技巧,也没法完成自动化测试用例的编写。 上面咱们讲解了基本的定位方法,因此本节咱们就从最基本的开始,当咱们欲定位一个页面元素的时候,应该如何选择定位方法。
为了简单期间,咱们就以百度为例,来说解页面元素定位方法选择的思路。现有一个测试用例以下:
测试步骤:
(1) 打开百度首页,输入“自动化测试”。
(2)百度一下,检测搜索结果
分析:
(1)打开百度没有任何问题,直接调用WebDriver API就好了。但是要输入“自动化测试”,咱们首先要定位到输入框架,而后再能输入要查询的关键字。
(2)百度一下,要定位到“百度一下”按钮,才能执行单击操做。检测搜索结果的时候,须要在查询结果页定位查询到的网页标题或是内容,才能检测。
至此咱们明白自动化要作的内容,就能够着手去编写自动化测试用例。至于如何编写是之后章节的内容,本节咱们主要关注元素定位的部分。如今咱们按以下步骤进行定位:
第一步:用火狐打开百度首页。
咱们之因此用火狐打开百度,是想利用火狐的插件Firebug来定位元素。
第二步,用Firebug查找定位的元素。
Firebug想必你们已经不会陌生,若是实在没有用过,就去网上搜一下这是个什么东东。咱们打开firebug,利用“点击查看页面中的元素”按钮,点击输入框,则firebug会以选中状态显示输入框在HTML中的标签。如图3.4.1 所示:
图3.4.1选中状态显示输入框
第三步,分析选择定位方法。
咱们先分析一下这个标签的特色:
方法:今后标签向上查找,遇到一个它的上级标签,就去找有没有惟一的属性,若是有,今后层往下写Xpath或Css,若是没有,接着向上层查找。
本标签的上一级标签是span,span有Class属性,但其值中有空格,不能使用Xpath(缘由见下节),但可使用Css,Css的定位方法是:input#kw.s_ipt。
第四步,编写定位代码
针对该标签,咱们如今把能用的定位方法所有写下来:
因而可知一个页面元素的定位方法是至关多的,咱们但是根据须要选择。而后再放到代码中去调试,若是不行,就换另外的办法。原则是:越简单的定位方法越好,由于这样的定位方法受到网站改版的影响也越小。
第五步,工具使用定位
通过上面四步咱们已经能够定位页面上的元素了,不过这都是经过咱们人工来查看的,而后手动编写的代码。有没有更加简单的方法来定位呢?答案是Yes,咱们要用到的就是传说中的FireBug和Selenium IDE。下面咱们简单地介绍一下使用方法:
(1) Firebug提取元素的Xpath,Css路径。
元素的id,name,class属性一目了然,直接可使用,若是元素没有这几个属性,就须要用Xpath和Css路径定位了。可是这两个路径不太容易写出来,因此Firebug提供了方法。
首先,咱们用Firebug找到要定位的元素。而后右击这个元素在Firebug中的位置,从弹出的菜单中选择“复制Xpath”,“复制最简Xpath”或是“复制CSS路径”。最后将复制到的内容粘贴出来,这就是对应页面元素的xpath或是Css路径。如图3.4.2所示:
图3.4.2 提取页面元素的CSS or Xpath路径
(2) Selenium IDE验证提取的路径是否正确。
经过Firebug咱们能够提取出元素的Css或者Xpath的路径,但是提取的究竟对不对呢?工具备的时候也不太靠谱,因此咱们要验证一下。最直接的办法就是放到测试用例中去执行一下,可是一直在执行测试用例,这样比较耗时。咱们能够借助于Selenium IDE来验证一下。
验证方法以下:
图3.4.3 验证定位元素正确的状况
图3.4.4 验证定位元素定位不到的状况
注意:
Firebug提交的路径通常都是从页面起始位置标签开始,一直提取到要定位的元素,是相对路径,容易受到网页变化的影响。不建议直接使用,只能够做为参考。
Selenium IDE验证定位方法,不只仅能够验证Firebug复制的路径,还能够验证咱们本身编写的路径,比用代码验证方便快捷。这种验证方法是个人最爱,节省了不省时间。