• 软件WEB自动化测试工具之智能元素定位


     江湖一直有着这么一句名言“天下武功,唯快不破"。那么在软件测试领域,自然而然我们会想到软件自动化测试。软件自动化测试的实现自然离不开软件自动化测试工具。软件自动化测试工具是软件自动化的载体,只有通过工具,我们才能实现。武林也是一样,成为武功盖世,除了武林秘决之外,还要有依天剑、屠龙刀的配合。

        话说软件开发模式有:瀑布模型、增量式开发、螺旋开发、敏捷开发。软件业早期的开发模式主要以瀑布模型为主,后期逐渐专为敏捷开发。软件开发效率和变更频率也随着开发模式的变化而变化,优其到了敏捷开发模式。一些传统的自动化测试工具显示力不从心,很难应付软件开发的快速迭代和变更,导致一些公司开展自动化测试,徒劳无功。主要原因有:自动化用例建设速度慢,跟不上软件新增内容;软件变更频繁导致用例维护成本巨大;学习成本高。所有这些都是自动化测试在中国软件业难以建树的主要原因。

         软件自动化测试工具工作流程:新建用例->调试用例->行执行用例->分析结果->输出报告->维护用例。其中:新建用例和维护用例是消耗最大的工作量。敏捷开发模式的引入,导致维护工量大大提升,甚至一度有超过新建用例工作量的趋势,这一直困扰软件自动化测试的一个头痛问题。

        自动化用例维护环节中,元素定位失效是一个主要原因。下面我们看一下一些常用自动化工具的元素定位原理:

    1、selenium元素定位样例

     以下是一段Python+ selenium的用例样例,对元素的操作是以元素id为基础的

     from selenium import webdriver
     url = "http://10.98.110.44/egov-portal/egov/shIndex.html"
     # 打开浏览器,最大化浏览器
     driver = webdriver.Chrome()
     driver.get( url )
     driver.implicitly_wait( 10 )
     driver.maximize_window()
     #输入账号
     driver.find_element_by_id("username").send_keys(“zhangsan")
     #输入密码
     driver.find_element_by_id("password").send_keys("ww1234")
     #点击登录按钮
     driver.find_element_by_id("submitButton").click()
    

     2、robotFramwork+seleniuLibrary元素定位样例

    3、UFT工具元素定位方法样例

    Dialog("Login").WinEdit("AgentName:").Set "mercury"
    Dialog("Login_2").WinButton("Help").Click
    Dialog("Login_2").Dialog("FlightReservations").Static("The password is 'MERCURY'").CheckCheckPoint("The password is 'MERCURY'")
    Dialog("Login_2").Dialog("FlightReservations").WinButton("确定").Click
    Dialog("Login").WinButton("OK").Click
    Window("FlightReservation").Activate
    Window("FlightReservation").ActiveX("MaskEdBox").Type "102715"
    #选择日期
    Window("Flight Reservation").WinComboBox("FlyFrom:").Select "Frankfurt"
    

     从以上信息我看到,元素的定位都是通过元素的属性定位,元素属性主要有以下8种:

      1、id定位: driver.find_element_by_id("kw")

     2、name定位: driver.find_element_by_name("wd")

     3、class定位: driver.find_element_by_class_name("s_ipt")

     4、tag定位:driver.find_element_by_tag_name("input")

     5、link定位:driver.find_element_by_link_text("新闻")

     6、partial_link定位:driver.find_element_by_partial_link_text()

     7、xpath定位: driver.find_element_by_xpath("/html/body/div[2]/div/form/div/input")

     8、CSS定位:driver.find_element_by_css_selector

    在现有的自动化软件当中,都是以上述8种定位方式中的一种对元素进行定位。现在现实的测试环境经常不是我们想象的那样平静。页面中出现id,name,tag 重复的很多。也许在我们写用例的不重复,经过一轮版本修改后很可能变得重复了。xpath是最不可能失效的,但是经常因父节点的修改而导致失效是常有的事。因此自动化设计人员疲于奔命的维护用例,工作量非常的巨大。

    4、元素智能定位

     kylinTOP的软件,支持智能元素定位, 我比较感兴趣就去研究了一下,该软件的用例主要通过录制生成,录制生成一些可视化的脚本,如下所示:

     上图是点按钮的步骤,步骤中记录了按钮的多个属性:title|alt、src、border、alt、xpath以及它的孩子信息。有些属性并不能唯一定位元素(页面中存在重复),如:border。kylinTOP记录下了按钮元素的所有身份信息。当笔者尝试修改页面代码中title|alt的值 ,使页面中title|alt的值有重复。在脚本回放时,仍然可以正常运行。恢复title|alt值 ,重复上述修改步骤,逐个修改其它属性值,仍然不影响脚本运行。通过测试发现,修改按钮任何属性都不影响脚本执行。

       通过阅读官网资料,说元素定位是根据元素的一系列属性进行定位,并不依赖于某一个属性,采取的是一种元素智能定位算法。在软件自动化测试领域,kylinTOP的元素定位的确有过人之处,大大提高了自动化用例执行的稳定性,节省了用例的维护成本。官网:www.70testing.com

  • 相关阅读:
    全--教程API, gem 'rest-client'(用于发简单请求); 请求测试;
    GoRails教程自建Rails 的 API; gem 'jbuilder'简单用法;使用JWT进行验证(git上的实做);curl命令使用;status状态码;JWT文档翻译摘录;
    go Rails 知识点,Concepts Series:url和parameter; 建立Rails App Templates;报错页面debug; counter_cache
    FontAwesome::Sass(5.x版)使用帮助。
    问题记录:
    slim(4621✨)
    物联网平台开发及应用:基于CC2530和ZigBee
    CATIA V5-6 R2017基础、进阶、高手一本通
    计算机组装与维护标准教程(2015—2018版)
    Web程序设计——ASP.NET(第2版)
  • 原文地址:https://www.cnblogs.com/kylinTOP/p/12490442.html
Copyright © 2020-2023  润新知