zoukankan      html  css  js  c++  java
  • 第三章 Webdriver Java API简介(上)

    ------Web自动化测试之Webdriver+TestNG--从零到熟练(系列)

    WebDriver也就是业界通称的Selenium 2.0,是页面自动化的通用框架,支持java, python, php等多种语言。也是其他自动化,如手机自动化化的基础。官方出了一个帮助文档,详细讲解了Webdriver Java API的相关操作,本章我们就不一一讲述了,把常用的给讲解一下,为后续的章节做准备。

    3.1 打开浏览器

       在对页面进行测试之前,我们需要在特定的浏览器中打开我们要测试的页面。Webdriver支持多种浏览器,常用的打开方法如下:

    (1)打开firefox浏览器:

    WebDriver driver=new FirefoxDriver();

    (2)打开IE浏览器:

    WebDriver driver=new InternetExplorerDriver();

    (3)打开HtmlUnit浏览器:

    WebDriver driver=new HtmlUnitDriver()

    说明:运行这段代码,可以打开对应的浏览器,firefox和IE浏览器自不必说,很常用的两个浏览器。至于HtmlUnitDriver这个大家就不常见了,这是一个内存级运行的驱动浏览器。测试用例在内存中运行,不会打开页面,运行速度比较快,但是也有缺点如果程序出错,不能直观地看到错误的现象。对javascript支持不好,如果页面包含太多的JS,经常会捕捉不到页面元素。

    (4)打开要测试的URL

    Driver.get(URL);

    3.2 页面元素定位方法

       要完成对页面元素进行操作,首先要先定位到这个页面元素,通常常用的页面元素定位方法有如下几种:

    (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”));

       常用的定位方法就这六种,不过通过一个页面元素可以使用不止一种定位方法,所以此时我们就要选择合适的定位方法来编写我们的测试用例。

    3.3 页面常用元素操作

       虽然在一个页面上的元素很多,可是我们常用的操作就那么几个元素,操作方法也是有限的,下面我们介绍一下常用元素的操作,我们以后的测试用例就是由这些儿操作组成的。

    (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中。

    3.4 定位方法的选择

         页 面元素的定位,是页面自动化测试过程中的首要任务及重中之重。如果连元素都定位不到,再好的测试框架,高超的编程技巧,也无法完成自动化测试用例的编写。 上面我们讲解了基本的定位方法,所以本节我们就从最基本的开始,当我们欲定位一个页面元素的时候,应该如何选择定位方法。

       为了简单期间,我们就以百度为例,来讲解页面元素定位方法选择的思路。现有一个测试用例如下:

    测试步骤:

    (1)  打开百度首页,输入“自动化测试”。

    (2)百度一下,检测搜索结果

    分析:

    (1)打开百度没有任何问题,直接调用WebDriver API就行了。可是要输入“自动化测试”,我们首先要定位到输入框架,然后再能输入要查询的关键字。

    (2)百度一下,要定位到“百度一下”按钮,才能执行单击操作。检测搜索结果的时候,需要在查询结果页定位查询到的网页标题或是内容,才能检测。

       至此我们明白自动化要做的内容,就可以着手去编写自动化测试用例。至于如何编写是以后章节的内容,本节我们主要关注元素定位的部分。现在我们按如下步骤进行定位:

    第一步:用火狐打开百度首页。

    我们之所以用火狐打开百度,是想利用火狐的插件Firebug来定位元素。

    第二步,用Firebug查找定位的元素。

    Firebug想必大家已经不会陌生,如果实在没有用过,就去网上搜一下这是个什么东东。我们打开firebug,利用“点击查看页面中的元素”按钮,点击输入框,则firebug会以选中状态显示输入框在HTML中的标签。如图3.4.1 所示:

     



    3.4.1选中状态显示输入框

     

    第三步,分析选择定位方法。

    我们先分析一下这个标签的特点:

    • 这是一个input标签,所以说Tag Name是input,通过我们查看网页源码,发现不是只有一个这样的标签,所以不能用TagName来定位。
    • 分析标签的属性,发现标签中具有我们特别感兴趣的属性class,name,id,这三个属性可以用来定位,而autocomplete,maxlength,value经过分析是不可用的,所以舍弃。
    • 假如标签不存上面的三个属性,我们就考虑一下能否用Xpath和CSS。

    方法:从此标签向上查找,遇到一个它的上级标签,就去找有没有唯一的属性,如果有,从此层往下写Xpath或Css,如果没有,接着向上层查找。

    本标签的上一级标签是span,span有Class属性,但其值中有空格,不能使用Xpath(原因见下节),但可以使用Css,Css的定位方法是:input#kw.s_ipt。

    • Xpath定位方法,我们接着上面继续向上查找,再上一级是form标签,这个标签有id,name,class属性,比较适合用来定位,所以从此层开始写Xpath是://form[@id=’form’]/span/input 或//form[@name=’f’]/span/input 或//form[@class=’fm’]/span/input。
    • 这个标签不是超级链接,所以不能用link相关的定位方法。

    第四步,编写定位代码

    针对该标签,我们现在把能用的定位方法全部写下来:

    • id: driver. findElement(By.id(“kw”))
    • name: driver. findElement(By.name( “wd”))
    • class: driver. findElement(By.className (“s_ipt”))
    • css: driver. findElement(By.cssSelect (“input#kw.s_ipt”))
    • xpath:driver. findElement(By.xpath (“//input[@id=’kw’]”))

    由此可见一个页面元素的定位方法是相当多的,我们可是根据需要选择。然后再放到代码中去调试,如果不行,就换另外的办法。原则是:越简单的定位方法越好,因为这样的定位方法受到网站改版的影响也越小。

    第五步,工具使用定位

    经过上面四步我们已经可以定位页面上的元素了,不过这都是通过我们人工来查看的,然后手动编写的代码。有没有更加简单的方法来定位呢?答案是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来验证一下。

    验证方法如下:

    • 用FireBug提取出要定位的元素的Xpath或者Css路径。
    • 打开Selenium IDE界面,右击界面“Insert new command”。
    • 将复制的路径粘贴到IDE的Target文本框中,如果复制的是Css路径,需要在复制的路径前加上“Css=”。
    • 单击Find按钮,此时Firebug中显示的要定位的元素会标黄显示,表示定位正确。如图3.4.3所示:

     



    3.4.3 验证定位元素正确的情况

    • 如果复制的路径不对,则IDE会在log区以红色的信息提示定位不到。如图3.4.4所示:

     


    图3.4.4 验证定位元素定位不到的情况

    注意:

    Firebug提交的路径一般都是从页面起始位置标签开始,一直提取到要定位的元素,是相对路径,容易受到网页变化的影响。不建议直接使用,只可以作为参考。

    Selenium IDE验证定位方法,不仅仅可以验证Firebug复制的路径,还可以验证我们自己编写的路径,比用代码验证方便快捷。这种验证方法是我的最爱,节省了不省时间。

  • 相关阅读:
    koa2 ctx.body 在 mysql query的回调函数中无法赋值的问题
    hibernate 实现多表连接查询
    Struts2 的国际化实现
    struts2 dwr There is no Action mapped for action ... 原因及解决方案
    Hibernate4.1配置数据库连接池 org.hibernate.service.jndi.JndiException:Unable to lookup JNDI name java:comp/env...
    Android 使用JSON格式与服务器交互 中文乱码问题解决
    Struts2 访问 Servlet API 的三种方法
    Struts2 输入校验
    hibernate4 和 spring3 整合注意事项 否则java.lang.NoSuchMethodError异常
    MySQL密码忘记的解决方案
  • 原文地址:https://www.cnblogs.com/hua-an/p/5165816.html
Copyright © 2011-2022 走看看