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

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

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

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

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

一、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()

 二、robotFramwork+seleniuLibrary元素定位样例工具

三、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种:测试

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

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

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

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

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

 六、partial_link定位:driver.find_element_by_partial_link_text()

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

 八、CSS定位:driver.find_element_by_css_selector

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

四、元素智能定位

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

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

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