• 第三章 Webdriver API简介(上)


     

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

     

    Selenium 2.0主要的特性就是与WebDriver API的集成。WebDriver旨在提供一个更简单,更简洁的编程接口以及解决一些Selenium-RC API的限制。Selenium-Webdriver更好的支持页面本身不重新加载而页面的元素改变的动态网页。WebDriver的目标是提供一个良好设计的面向对象的API,提供了对于现代先进web应用程序测试问题的改进支持。

    3.1 Webdriver API

    Web应用程序的测试主要是基于调用Webdriver Api来模拟用户操作,然后判断操作结果是否与预期的一致,从而达到自动化测试的目的。所以熟悉WebdriverAPI的使用很重要,也是我们在做自动化测试的先决条件。

    Webdriver API网上有官方文档,不过由于种种原因吧,官网不太容易打开。所以我们可以在百度中去搜索相关的文档,结果也非常多。不同语言的API有点儿不太一样,由于我们采用的是Python作为脚本语言,所以建议看出Python版的,推荐以下两个网页:

    1selenium_webdriver(python)第一版:http://wenku.baidu.com/link?url=PDcKQYNL-iVRlahMunWoY1BDMw5vyUvv-AFCtC6eUCfG0R5XdC0SnBCHdp742uY6riA25FdBfaUtL-N2uZiXj6PXxIyRGcI-bV1QEYSZHGW

    2)虫师的翻译:http://www.cnblogs.com/fnng/archive/2013/06/16/3138283.html

    这两篇文档刚好是一个人的,我看了一下写的比较详细,大家就去自行学习一下吧。

    关于Webdriver API的一点儿说明:

    Ø  API只是一些儿封闭的方法,大致浏览一下,知道有哪儿些API,完成什么操作即可,没有必要花很多时间去学习,边用边学。

    Ø  API的学习要灵活,最好把同类的操作放到一起比较一下。因为在编写测试用例的过程中,不仅仅只有一种方法可以达到预期的结果。

    Ø  要会使用Eclipse的联想功能。在写测试用例的时候,如果一时想不起来用什么方法了,可以利用联想功能进行查询。

    本章我们就不详细讲解这些儿API的使用方法了,重点将放到页面元素的定位及检查点的设置,这些儿是体现一个自动化测试工程师水平的重点。

     

    3.2 页面元素定位

    自动化测试是模拟用户对页面元素进行操作的,所以在操作之前,需要先定位到要操作的页面元素。如果页面元素都定位不到,其他的操作将无从谈起。而对页面元素定位技巧,随着经验的增加,将会越来越精准。而在此,我们将从基础谈起,然后再逐步加深!

    3.2.1 WebElement对象提供的各种定位元素策略

    下面我们先来讲解一下WebElement对象提供的各种常用的定位元素策略:

    Ø  通过ID定位元素:

    IDdriver. find_element_by_id()

    示例:当一个页面元素如下,明显包含id属性,而且属性值是固定的时候,可以使用这个定位方法。

    ##<</SPAN>div id="nav" class="m-subnav">…..

     

    Ex: driver. find_element_by_id(“nav”)

     

    Ø  通过Name定位元素:

    Namedriver. find_element_by_name()

    示例:当一个页面元素如下,明显包含name属性,而且属性值是固定的时候,可以使用这个定位方法。

    ##用户名/手机号/邮箱" wx-validator-username-required="*请输入账号" wx-validator-rule="required" name="username" class="foc" placeholder="用户名/手机号/邮箱">

     

    Ex: driver. find_element_by_name(“username”)

     

    Ø  通过ClassName定位元素:

    classNamedriver. find_element_by_class_name()

    示例:当一个页面元素如下,明显包含name属性,而且属性值是固定的时候,可以使用这个定位方法。

    ##<</SPAN>div class="bx-wrapper" style="max- 100%;">….

     

    Ex: driver. find_element_by_class_name(“bx-wrapper”)

     

    Ø  通过TagName定位元素:

    tagNamedriver. find_element_by_tag_name ()

    示例:当一个页面元素如下,这是一个form元素,如果本页中只有一个form,可以使用这个定位方法。

    ##<<SPAN style="COLOR: red">form wx-validator="" method="get" action="/deals" >

    ##

    ##输入关键词" name="k" placeholder="输入关键词">

    ##

    ##

    ##</<SPAN style="COLOR: red">form>

     

    Ex: driver. find_element_by_tag_name(“form”)

     

    Ø  通过LinkText定位元素:

    linkTextdriver. find_element_by_link_text ()

    示例:当一个页面元素如下,明显是一个超级链接,可以使用这个定位方法。

    ##"http://www.google.com/search?q=cheese">cheese

     

    Ex: driver. find_element_by_link_text(“cheese”)

     

    Ø  通过PartialLinkText定位元素:

    partialLinkTextdriver. find_element_by_partial_link_text ()

    示例:当一个页面元素如下,明显是一个超级链接,但是超级链接显示的文字比较长的时候,可以使用这个定位方法,通过部分文字定位。

    ##"http://www.google.com/search?q=cheese">search for cheese

     

    Ex: driver. find_element_by_link_text(“cheese”)

     

    Ø  通过CSS定位元素:

    cssdriver. find_element_by_css_selector ()

    示例:当一个页面元素如下,这个可以使用CSS定位。

    ##

    ##

    ……

    ##

    ##

     

    Exdriver. find_element_by_css_selector“#div.m-right.clearfix span.z-Login”

     

    Ø  通过Xpath定位元素:

    xpathdriver. find_element_by_xpath ()

    示例:当一个页面元素如下,div中嵌套h3,h3中嵌套a标签,现在我们要定位这个a标签的元素。现在我们采用xpath定位方法:

    ##

    ##

    ##

    ##

    ##

     

    Exdriver. find_element_by_xpath“//div[@class=’ lev_Box lev_Box_noborder’]/h3/a”

     

    以上是WebElement对象提供的定位方法,这八种方法是最基本的。不过大家要有这样的一个共识,元素定位不只是有一种方法能定位到。一个页面元素可以通过很多种方法来定位,要选择一个比较恰当的方法,这就需要一些儿技巧和经验了。

    3.2.2 定位方法的选择

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

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

    测试步骤:

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

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

    分析:

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

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

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

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

    我们之所以有火狐打开百度,是想利用在第二章我们讲到的火狐的插件来定位元素。

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

    Firebug想必大家已经会使用了,我们打开firebug,利用“点击查看页面中的元素”按钮,点击输入框,则firebug会以选中状态显示输入框在HTML中的标签。如图3.2.2.1 所示:

     第三章 <wbr>Webdriver <wbr>API简介(上)

     

    3.2.2.1选中状态显示输入框

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

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

    Ø  这是一个input标签,所以说Tag Nameinput,通过我们查看网页源码,发现不是只有一个这样的标签,所以不能用find_element_by_tag_name来定位。

    Ø  分析标签的属性,发现标签中具有我们特别感兴趣的属性class,name,id,这三个属性可以用来定位,而autocomplete,maxlength,value经过分析是不可用的,所以舍弃。

    Ø  假如标签不存上面的三个属性,我们就考虑一下能否用XpathCSS

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

    本标签的上一级标签是span,spanClass属性,但其值中有空格,不能使用Xpath(原因见下节),但可以使用CssCss的定位方法是: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. find_element_by_id(“kw”)

    Ø  name: driver. find_element_by_name(“wd”)

    Ø  class: driver. find_element_by_class_name(“s_ipt”)

    Ø  css: driver.find_element_by_css_selector(“input#kw.s_ipt”)

    Ø  xpath:driver.find_element_by_xpath(“//input[@id=’kw’]”)

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

    第五步,工具使用定位

     经过上面四步我们已经可以定位页面上的元素了,不过这都是通过我们人工来查看的,然后手动编写的代码。有没有更加简单的方法来定位呢?答案是Yes,就是我们前面提到的FireBugSelenium IDE。下面我们简单地介绍一下使用方法:

    (1)    Firebug提取元素的XpathCss路径。

    元素的id,name,class属性一目了然,直接可以使用,如果元素没有这几个属性,就需要用XpathCss路径定位了。但是这两个路径不太容易写出来,所以Firebug提供了方法。

    首先,我们用Firebug找到要定位的元素。然后右击这个元素在Firebug中的位置,从弹出的菜单中选择“复制Xpath”,“复制最简Xpath”或是“复制CSS路径”。最后将复制到的内容粘贴出来,这就是对应页面元素的xpath或是Css路径。如图3.2.2.2所示:

    第三章 <wbr>Webdriver <wbr>API简介(上)

    3.2.2.2 提取页面元素的CSS or Xpath路径

    (2)             Selenium IDE验证提取的路径是否正确。

       通过Firebug我们可以提取出元素的Css或者Xpath的路径,可是提取的究竟对不对呢?工具有的时候也不太靠谱,所以我们要验证一下。最直接的办法就是放到测试用例中去执行一下,但是一直在执行测试用例,这样比较耗时。我们可以借助于Selenium IDE来验证一下。

    验证方法如下:

    Ø  FireBug提取出要定位的元素的Xpath或者Css路径。

    Ø  打开Selenium IDE界面,右击界面“Insert new command”。

    Ø  将复制的路径粘贴到IDETarget文本框中,如果复制的是Css路径,需要在复制的路径前加上“Css=”。

    Ø  单击Find按钮,此时Firebug中显示的要定位的元素会标黄显示,表示定位正确。如图3.2.2.3所示: 

    第三章 <wbr>Webdriver <wbr>API简介(上)

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

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

    第三章 <wbr>Webdriver <wbr>API简介(上)

    3.2.2.4 验证定位元素定位不到的情况

    注意:

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

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

    ----夫英雄者,胸怀大志,腹有良谋,有包藏宇宙之机,吞吐天地之志者也。
  • 相关阅读:
    vscode设置不展示 .pyc文件
    Centos7安装python3并与python2共存, 以及安装pip(pip3)
    vmware 安装 centos7 及网络配置,永久修改主机名
    VMware虚拟机ubuntu显示屏幕太小解决办法, 安装 VM tools
    struct timeval和gettimeofday()
    cocos2d-x中CCLabelAtlas的小图片拼接
    Core Animation系列之CADisplayLink
    Xcode5 上64位编译 出错No architectures to compile for
    通过OpenGL ES在iOS平台实践增强现实
    通过OpenGL ES在iOS平台实践增强现实(一)
  • 原文地址:https://www.cnblogs.com/eagleking0318/p/6520896.html
Copyright © 2020-2023  润新知