使用QTP录制使用extjs框架的web

近来使用QTP录制使用extjs框架编写的web软件,遇到诸多问题,而google上资料甚少,所以把一些心得总结于此。

    extjs的页面对象会用很多WebElement替代link,button等传统html对象。这样虽然让整个web页面做的仿windows操作系统,但给qtp自动化测试的介入带来了不少问题。闲话不多说,直入主题。

    假设页面有两个图标,名称分别为图标1和图标2,点击分别可以打开列表1和列表2

    点击页面两个图标的录制结果

    Browser("mike").Page("mike").WebElement("WebElement").FireEvent"onmouseover"

    Browser("mike").Page("mike").WebElement("WebElement").Click

    Browser("mike").Page("mike").WebElement("WebElement_2").FireEvent"onmouseover"

    Browser("mike").Page("mike").WebElement("WebElement_2").Click

    上面4行vbs代码,用qtp回放,qtp是很难找到目标图标的,因为WebElement参数值始终随着页面的变化而动态变化。希望qtp能够按希望找到2个图标解决办法如下。

    1.使用关键字驱动

    进入resources->Object Repository,将WebElement重命名为图标1,WebElement_2重命名为图标2,发现代码变为

    Browser("mike").Page("mike").WebElement("图标1").FireEvent"onmouseover"

    Browser("mike").Page("mike").WebElement("图标1").Click

    Browser("mike").Page("mike").WebElement("图标2").FireEvent"onmouseover"

    Browser("mike").Page("mike").WebElement("图标2").Click

    回放脚本,发现qtp可以找到图标并且点击成功。

    如果图标1和图标2的名称为空,那这两个图标成为无依无靠的webelement。那必须使用第二种办法

    2.描述性编程

    使用object spy将两个图标加入对象库,会发现这两个webelement的父节点为page("mike")并且图标有很多属性值,其中的大部分属性值会因为extjs或者web页面的变化而变化。找到其中不变的属性,使用描述性编程关联到该两个图标。代码如下

    Set MyDescription =Description.Create() '创建对象描述,包括属性名和属性值

    MyDescription("micclass").Value="WebElement" '属性名为micclass,属性值为WebElement

    MyDescription("@属性名").Value="@属性值" '不变的属性值和属性名来区分其他的WebElement

    Set MyChildObject = Browser("mike").Page("mike").ChildObjects(MyDescription) '将WebElement作为Page("mike")的子节点

    msgBox MyChildObject.Count '弹出窗显示子节点个数

    ChildObjectsCount = MyChildObject.Count '循环点击每个WebElement

    For Counter=ChildObjectsCount-1 to 0 step -1

    MyChildObject(Counter).Click

    Next

    extjs的WebElement对象有它的类属性是micclass,使用该语句可以找到页面所有的WebElement。

    使用方法2,可以减少使用object spy的繁琐步骤,并且代码的可移植性和重用性较强。该方法一般适用于页面上没有name的对象,比如关闭按钮,翻页按钮等等。

你可能感兴趣的:(自动化测试工具,软件测试)