美文网首页我爱编程
Selenium元素定位

Selenium元素定位

作者: 闻香师叔 | 来源:发表于2017-12-13 08:52 被阅读0次

    1.Selenium元素定位

    1.1自动化测试基础

    1.1.1分层的自动化测试

    传统的自动化测试更关注产品UI层的自动化测试,而分层的自动化测试倡导产品开发的不同阶段(层
    次)都需要自动化测试。


    分层自动化测试

    单元测试:我们需要规范的来做单元测试同样需要相应的单元测试框架,如java的Junit、testNG,
    C#的NUnit,Python的unittest、pytest等,几乎所有的主流语言,都会有其对应的单元测试框架。

    集成、接口测试:对于不少测试新手来说不太容易理解,单元测试关注代码的实现逻辑,例如一个if
    分支或一个for循环的实现;那么集成、接口测试关注的一是个函数、类(方法)所提供的接口是否可靠。
    例如,我定义一个add()函数用于计算两个参数的结果并返回,那么我需要调用add()并传参,并比较返
    回值是否两个参数相加。当然,接口测试也可以是url的形式进行传递。例如,我们通过get方式向服务
    器发送请求,那么我们发送的内容做为URL的一部分传递到服务器端。但比如Webservice技术对外提
    供的一个公共接口,需要通过soapUI等工具对其进行测试。

    UI层的自动化测试:这个大家应该再熟悉不过了,大部分测试人员的大部分工作都是对UI层的功能
    进行测试。例如,我们不断重复的对一个表单提交,结果查询等功能进行测试,我们可以通过相应的自动
    化测试工具来模拟这些操作,从而解放重复的劳动。UI层的自动化测试工具非常多,比较主流的是QTP,
    RobotFramework、watir、Selenium等。

    1.1.2什么样的项目适合自动化测试

    不是所有项目都适合实施自动化测试的,以免对项目实施自动化过程中感到困难重重,浪
    费了大量的人力和时间而没有得到应有的收益。

    • 1 任务测试明确,不会频繁变动
    • 2 每日构建后的测试验证
    • 3 比较频繁的回归测试
    • 4 软件系统界面稳定,变动少
    • 5 需要在多平台上运行的相同测试案例、组合遍历型的测试、大量的重复任务
    • 6 软件维护周期长
    • 7 项目进度压力不太大
    • 8 被测软件系统开发比较规范,能够保证系统的可测试性
    • 9 具备大量的自动化测试平台
    • 10 测试人员具备较强的编程能力

    软件需求变动不频繁
    测试脚本的稳定性决定了自动化测试的维护成本。如果软件需求变动过于频繁,测试人员需要根
    据变动的需求来更新测试用例以及相关的测试脚本,而脚本的维护本身就是一个开发代码的过程,需
    要修改、调试,必要的时候还要修改自动化测试的框架,如果所花费的成本高于利用其节省的测试成
    本,那么自动化测试便是失败的。
    项目中的某些模块相对稳定,而某些模块需求变动性很大。我们便可对相对稳定的模块进行自动
    化测试,而变动较大的仍是用手工测试。

    项目周期较长
    由于自动化测试需求的确定、自动化测试框架的设计、脚本的开发与调试均需要时间来完成。这
    样的过程本身就是一个测试软件的开发过程。如果项目的周期比较短,没有足够的时间去支持这样一
    个过程,那么自动化测试便成为笑谈。

    自动化测试脚本可重复使用
    自动化测试脚本的重复使用要从三个方面来考量,一方面所测试的项目之间是否很大的差异性(如
    C/S系统和B/S系统的差异);所选择的测试工具是否适应这种差异;最后,测试人员是否有能力开发出
    适应这种差异的自动化测试框架。

    1.1.3自动化测试以及工具简介

    自动化测试的概念有广义与狭义之分;广义上来讲所有借助工具来进行软件测试都可以称为自动化测
    试;狭义上来讲,主要指基于UI层的自动化测试;除此之外还有基代码编写阶段的单元自动化测试,基
    本集成测试阶段的接口自动化测试。
    目前市面上的自动化测试工具非常多,下面几款是比较常见的自动化测试工具。

    QTP
    QTP是HPQuickTestProfessionalsoftware的简称,是一种企业级的自动测试工具。提供了强大
    易用的录制回放功能。支持B/S与C/S两种架构的软件测试。是目前主流的自动化测试工具。

    RobotFramework
    RobotFramework是一款Python编写的功能自动化测试框架。具备良好的可扩展性,支持关键字驱动,
    可以同时测试多种类型的客户端或者接口,可以进行分布式测试执行。

    watir
    Watir全称是“WebApplicationTestinginRuby”。它是一种基于Web模式的自动化功能测试工具。
    watir是一个Ruby语言库,使用Ruby语言进行脚本开发。

    Selenium
    Selenium也是一个用于Web应用程序测试的工具,支持多平台、多浏览、多语言去实现自动化测试。
    目前在web自动化领域应用越来越广泛。
    当然,除了上面所列自动化测试工外,根据不同的应用还有很多商业的、开源的以及公司自己开发的
    自动化测试工具。

    1.2 Selenium工具介绍

    1.2.1 什么是Selenium

    Selenium自动化测试浏览器,它主要是用于Web应用程序的自动化测试,但肯定不只局限于此,同
    时支持所有基于web的管理任务自动化。
    Selenium的特点:

    • 开源,免费
    • 多浏览器支持:FireFox、Chrome、IE、Opera
    • 多平台支持:linux、windows、MAC
    • 多语言支持:java、Python、Ruby、php、C#、JavaScript
    • 对web页面有良好的支持
    • 简单(API简单)、灵活(用开发语言驱动)
    • 支持分布式测试用例执行

    Selenium经历了两个版本,Selenium1.0和Selenium2.0,Selenium也不是简单一个工具,而
    是由几个工具组成,每个工具都有其特点和应用场景。


    Selenium家谱

    1.2.2 Selenium简介

    Selenium 是用于测试 Web 应用程序用户界面 (UI) 的常用框架。它是一款用于运行端到端功能测试的超强工具。您可以使用多个编程语言编写测试,并且 Selenium 能够在一个或多个浏览器中执行这些测试。

    Selenium的发展经历了三个阶段,第一个阶段,也就是selenium1的时代,在运行selenium1.0程序之前,我们得先启动selenium server端(selenium remote control),我们简称RC。RC主要包括三个部 分:launcher,http proxy,selenium core。其中selenium core是被selenium server嵌入到浏览器页面中的,selenium core内部是一堆javascript函数构成,通过调用这些函数来实现对浏览器的各种操作。

    很显然比较繁琐,这并不是最佳自动化解决方案,于是后来有了webdriver。 selenium2 的时代合并了webdriver,也就是我们通常说的selenium,selenium2是默认支持Firefox浏览器的,这点非常方便。当然也支持其他更多浏览器,Ie和chrome浏览器需要下载驱动包,并添加到环境变量下。

    selenium3 是2016年十月份左右出来的,并且现在默认安装都是selenium3了,selenium3在selenium2的基础上做了一些调整,最明显的区别 就是 selenium2对Firefox的支持最高只支持46及以下版本。selenium3可以支持47以上版本,但是需要下载 geckodriver.exe驱动,并添加到环境变量path下。

    2.Selenium元素定位

    2.1环境准备

    1.浏览器选择:Firefox

    2.安装插件:Firebug和FirePath(设置》附加组件》搜索:输入插件名称》下载安装后重启浏览器)

    3.安装完成后,页面右上角有个小爬虫图标

    4.快速查看xpath插件:XPath Checker这个可下载,也可以不用下载

    5.插件安装完成后,点开附加组件》扩展,如下图所示

    组件

    2.2查看页面元素

    以百度搜索框为例,先打开百度网页

    1.点右上角爬虫按钮

    2.点左下角箭头

    3.讲箭头移动到百度搜索输入框上,输入框高亮状态

    4.下方红色区域就是单位到输入框的属性:

    <input id="kw" class="s_ipt" type="text" autocomplete="off" maxlength="100" name="wd">
    
    image

    2.3 元素定位

    2.3.1 find_element_by_id()

    1. 从上面定位到的元素属性中,可以看到有个id属性:id="search-key",这里可以通过它的id属性单位到这个元素。
    2. 定位到搜索框后,用send_keys()方法
    image

    2.3.2 find_element_by_name()

    1. 从上面定位到的元素属性中,可以看到有个name属性:name="wd",这里可以通过它的name属性单位到这个元素。

      说明:这里运行后会报错,说明这个搜索框的name属性不是唯一的,无法通过name属性直接定位到输入框。

    image
    1. 从上面定位到的元素属性中,可以看到有个class属性:class="s_ipt",这里可以通过它的class属性定位到这个元素。
    image

    2.3.4 find_element_by_tag_name()

    1. 从上面定位到的元素属性中,可以看到每个元素都有tag(标签)属性,如搜索框的标签属性,就是最前面的input
    2. 很明显,在一个页面中,相同的标签有很多,所以一般不用标签来定位。以下例子,仅供参考和理解,运行肯定报错
    image

    2.3.5 find_element_by_link_text()

    1. 定位百度页面上"hao123"这个按钮
    image

    查看页面元素:

    <a class="mnav" target="_blank" href="http://www.hao123.com">hao123</a>
    
    1. 从元素属性可以分析出,有个href = "http://www.hao123.com
      说明它是个超链接,对于这种元素,可以用以下方法
    image

    2.3.6 find_element_by_partial_link_text()

    1. 有时候一个超链接它的字符串可能比较长,如果输入全称的话,会显示很长,这时候可以用一模糊匹配方式,截取其中一部分字符串就可以了
    2. 如“hao123”,只需输入“ao123”也可以定位到
    image

    2.3.7 find_element_by_xpath()

    1. 以上定位方式都是通过元素的某个属性来定位的,如果一个元素它既没有id、name、class属性也不是超链接,这么办呢?或者说它的属性很多重复的。这个时候就可以用xpath解决
    2. xpath是一种路径语言,跟上面的定位原理不太一样,首先第一步要先学会用工具查看一个元素的xpath
    image

    3.安装上图的步骤,在FriePath插件里copy对应的xpath地址

    image

    2.3.8 find_element_by_css_selector()

    1. css是另外一种语法,比xpath更为简洁,但是不太好理解。这里先学会如何用工具查看,后续的教程再深入讲解
    2. 打开FirePath插件选择css
    3. 定位到后如下图红色区域显示
    image

    2.4 总结

    selenium的webdriver提供了八种基本的元素定位方法,前面六种是通过元素的属性来直接定位的,后面的xpath和css定位更加灵活,需要重点掌握其中一个。
    1.通过id定位:find_element_by_id()

    2.通过name定位:find_element_by_name()

    3.通过class定位:find_element_by_class_name()

    4.通过tag定位:find_element_by_tag_name()

    5.通过link定位:find_element_by_link_text()

    6.通过partial_link定位:find_element_by_partial_link_text()

    7.通过xpath定位:find_element_by_xpath()

    8.通过css定位:find_element_by_css_selector()

    相关文章

      网友评论

        本文标题:Selenium元素定位

        本文链接:https://www.haomeiwen.com/subject/eczoixtx.html