51Testing软件测试论坛

标题: silktest天龙八部系列 [打印本页]

作者: yuetiantian    时间: 2010-12-5 21:01
标题: silktest天龙八部系列
SilkTest天龙八部系列1-初始化和构造函数
SilkTest没有提供专门的构造函数机制,但是在类对象生成的过程中,会先初始化在类中申明的变量。我们可以在初始化该变量的时,调用某些函数完成对象初始化工作,看上去好像是调用了构造函数一样。不过要记住的是,这只是用来模拟构造函数而已。

下面是一个例子:
1.         [-] winclass myClass  
2.            [ ] boolean bConstructed = Constructor (SubStr (WindowTag(this), 2))  
3.            [ ] string sSetMe  
4.            [ ] integer i  
5.            [ ]   
6.            [-] boolean Constructor (string sConstructorData)  
7.                [-] if (!IsSet(bConstructed))  
8.                    [ ] sSetMe = sConstructorData  
9.                [ ] return true  
10.            [ ]   
11.            [-] property SetMe  
12.                [-] string Get()  
13.                    [ ] return sSetMe  
14.        [ ]   
15.        [ ] // test that the myClass constructor works  
16.        [-] testcase testClass () appstate none  
17.            [ ] window myObject = myClass ("Set property")  
18.            [ ] print(WindowTag(myObject))  
19.            [ ] print ("myObject.SetMe = {myObject.SetMe}")  
20.            [ ] print ("myObject.i = {myObject.i}")  

我们来分析一下这段代码。
一开始声明了一个myClass类,他有三个变量,其中bConstructed的初始化调用了类的一个成员函数Constructor(),这个函数其实可以叫任何名字。所以,window myObject = myClass ("Set property")这句直接会导致成员函数Constructor()被调用。那么,为什么要给该函数传一个参数SubStr (WindowTag(this), 2)进去呢,这需要了解一下WindowTag()的意义,WindowTag()会返回对象的tag,而不管该对象是否存在。一般的Tag都是以斜线/开头的,window myObject = myClass ("Set property")这句的意思你就可以理解为(其实这不太容易理解,没办法,4Test当初就是这么设计的)获取对象"Set property"的Tag,它的Tag就是"/Set property"。所以在初始化bConstructed的过程中,同时初始化了成员变量bConstructed,而成员变量i并没有被初始化,所以当你运行整个脚本的时候,会得到如下的输出:
1.         [-] Testcase testClass - 1 error  
2.            [ ] /Set property  
3.            [ ] myObject.SetMe = Set property  
4.            [ ] *** Error: Variable (i) has not been set  
5.            [ ] Occurred in testClass at test3.t(20)  


作者: Zeng YueTian
网站: SilkTest 中文站
网址: http://blog.csdn.net/yuetiantian/
版权所有 - 转载时必须以链接形式注明作者和原始出处
作者: yuetiantian    时间: 2010-12-5 21:01
SilkTest天龙八部系列2-OCR
SilkTest提供了基本的OCR功能,其中OCR 代表Optical Character Recognition光学字符识别,它允许SilkTest从屏幕区域或者图片上获取文字内容。注意:这和silktest从对象上取得caption 或者text是两回事(通过windows消息调用),OCR是根据像素的分布用一定的pattern来识别文字的。
Silktest的OCR函数定义在安装目录里的OCR.inc中,它主要提供了两个函数:OcrGetTextFromWnd(),OcrGetTextFromBmp().它们分别提供了从屏幕对象上和bmp文件中识别文字的功能。
帮助文件中对他们的描述如下:
OCR.inc includes the following 4Test functions for OCR:
•    function:    iRet = OcrGetTextFromBmp (sOcrText, sBitmapFile)
•    returns:    iRet: Result length. If conversion fails, then an E_OCR exception will be raised. INTEGER.
•    parameter: sOcrText: The result of converting the bitmap to text. NULL if conversion failed. OUT. STRING.
•    parameter: sBitmapFile: The bitmap (.bmp) file to convert. STRING.
•    notes:    Convert a bitmap file into text. The conversion uses the preconfigured pattern file, which is in the textract.ini file (Database Path setting).
•    function:    iRet = OcrGetTextFromWnd (sText, wWindow[, rCapture])
•    returns:    iRet: Result length. If conversion fails, then an E_OCR exception will be raised. INTEGER.
•    parameter: sText: The result of converting a bitmap of the window to text. NULL if conversion failed. OUT. STRING.
•    parameter: wWindow: The window that will be the source of the bitmap to be converted to text. WINDOW.
•    parameter: rCapture: The capture region. OPTIONAL. RECT.
•    notes:    Convert a bitmap of a window (or area within a window) into text. The conversion uses the preconfigured pattern file, which is specified in the textract.ini file (Database Path setting).

SilkTest默认使用的textract来实现文本的识别,它的设置可以在textract.ini配置文件中找到,其中的配置行Database Path=C:\Program Files\Borland\SilkTest\SgOcrPattern.pat定义了使用sgOcrPattern.pat这个pattern库来进 行识别工作。
下面我们做一个简单的例子,你需要首先打开一个记事本(notepad),输入1行文本:Here is an example for OCR test 然后运行下面的script:
1.         [-] testcase OCR()  
2.            [ ] int iRet  // return value   
3.            [ ] string sText // text  
4.            [ ] string sBmp = "c:\screenshot.bmp"  
5.            [ ] MainWin("New Text Document (2).txt*|*Notepad|$C:\WINDOWS\system32\NOTEPAD.EXE").SetActive()  
6.            [ ] iRet = OcrGetTextFromWnd (sText, MainWin("New Text Document (2).txt*|*Notepad|$C:\WINDOWS\system32\NOTEPAD.EXE").TextField("#1|$15"))  
7.            [ ] print(iRet)  
8.            [ ] print(sText)  
9.            [ ] MainWin("SH.txt*|*Notepad|$C:\WINDOWS\system32\NOTEPAD.EXE").TextField("#1|$15").CaptureBitmap(sBmp)  
10.            [ ] iRet = OcrGetTextFromBmp (sText, sBmp)  
11.            [ ] print(iRet)  
12.            [ ] print(sText)  

它的目的是从记事本的TextField上用 OcrGetTextFromWnd() 直接识别文本内容,然后再抓屏在c盘上生成一个bmp文件,然后用 OcrGetTextFromBmp() 从该bmp文件识别文本内容。 在我机器上得到的结果是:
1.        [ ] 37  
2.        [ ] H  r   is an   xam  I   for OCR t  st  
3.        [ ] 37  
4.        [ ] H  r   is an   xam  I   for OCR t  st  
这说明用 OcrGetTextFromWnd() 和OcrGetTextFromBmp()得到的结果基本一致,但是都不太理想,因为有一些字符都没有识别出来。如果你把记事本中的文本内容改成大写: HERE IS AN EXAMPLE FOR OCR TEST 结果就好得多了。
1.        [ ] 32  
2.        [ ] HERE IS AN EXAMP  E FOR OCR TEST  
3.        [ ] 32  
4.        [ ] HERE IS AN EXAMP  E FOR OCR TEST  
可见SilkTest自带的OCR识别库并不能很好的应对各种情况,所以在实际的项目中,你可能需要使用其他第三方或者开发自己的pattern库,这对自动化测试工程师来说是一个挑战。
作者: Zeng YueTian
网站: SilkTest 中文站
网址: http://blog.csdn.net/yuetiantian/
版权所有 - 转载时必须以链接形式注明作者和原始出处
作者: yuetiantian    时间: 2010-12-5 21:02
SilkTest天龙八部系列3-动态父窗口
SilkTest中用parent语句来声明某个window的父窗口,这会帮助silktest在识别该对象时检查其是否是由该父窗口打开,如果parent语句申明的父窗口并不存在,那么该对象无法被正确识别。

有的时候,某些新打开的窗口可能由多个父窗口打开,那么固定的parent语句显然无法完成任务,这个时候有两种方法解决。一是使用动态的tag语句来代替parent的功能,另外就是编写tag函数来动态返回动态的tag。
例如我们想要测试一个silktest onlinehelp的BookmarkDefine窗口(打开silktest onlinehelp->菜单bookmark->define),正常情况下我们抓取的inc文件如下:
1.         [-] window MainWin SilkTestHelp  
2.            [+] multitag "SilkTest Help"  
3.                [ ] "$C:\WINDOWS\winhlp32.exe"  
4.            [+] Menu File  
5.                [ ] tag "File"  
6.                [+] MenuItem Open  
7.                    [+] multitag "Open"  
8.                        [ ] "$1101"  
9.                [+] MenuItem PrintTopic  
10.                    [+] multitag "Print Topic"  
11.                        [ ] "$1103"  
12.                [+] MenuItem Exit  
13.                    [+] multitag "Exit"  
14.                        [ ] "$1105"  
15.            [+] Menu Edit  
16.                [ ] tag "Edit"  
17.                [+] MenuItem Copy  
18.                    [+] multitag "Copy"  
19.                        [ ] "$1203"  
20.                [+] MenuItem Annotate  
21.                    [+] multitag "Annotate"  
22.                        [ ] "$1202"  
23.            [+] Menu Bookmark  
24.                [ ] tag "Bookmark"  
25.                [+] MenuItem Define  
26.                    [+] multitag "Define"  
27.                        [ ] "$1301"  
28.            [+] Menu Options  
29.                [ ] tag "Options"  
30.                [+] Menu KeepHelpOnTop  
31.                    [ ] tag "Keep Help on Top"  
32.                    [+] MenuItem Default  
33.                        [+] multitag "Default"  
34.                            [ ] "$1470"  
35.                    [+] MenuItem OnTop  
36.                        [+] multitag "On Top"  
37.                            [ ] "$1471"  
38.                    [+] MenuItem NotOnTop  
39.                        [+] multitag "Not On Top"  
40.                            [ ] "$1472"  
41.                [+] MenuItem DisplayHistoryWindow  
42.                    [+] multitag "Display History Window"  
43.                        [ ] "$1453"  
44.                [+] Menu Font  
45.                    [ ] tag "Font"  
46.                    [+] MenuItem Small  
47.                        [+] multitag "Small"  
48.                            [ ] "$1462"  
49.                    [+] MenuItem Normal  
50.                        [+] multitag "Normal"  
51.                            [ ] "$1460"  
52.                    [+] MenuItem Large  
53.                        [+] multitag "Large"  
54.                            [ ] "$1461"  
55.                [+] MenuItem UseSystemColors  
56.                    [+] multitag "Use System Colors"  
57.                        [ ] "$1465"  
58.            [+] Menu Help  
59.                [ ] tag "Help"  
60.                [+] MenuItem Version  
61.                    [+] multitag "Version"  
62.                        [ ] "$1503"  
63.                [+] MenuItem AboutWinHelp2000  
64.                    [+] multitag "About WinHelp 2000"  
65.                        [ ] "$10001"  
66.            [+] CustomWin MS_WINTOPIC1  
67.                [ ] tag "[MS_WINTOPIC]$0"  
68.            [+] CustomWin MS_WINICON1  
69.                [ ] tag "[MS_WINICON]$0"  
70.                [+] PushButton HelpTopics  
71.                    [+] multitag "Help Topics"  
72.                        [ ] "$-1[1]"  
73.                [+] PushButton Back  
74.                    [+] multitag "Back"  
75.                        [ ] "$-1[2]"  
76.                [+] PushButton Print  
77.                    [+] multitag "Print"  
78.                        [ ] "$-1[3]"  
79.            [+] CustomWin Wh98NavPane1  
80.                [ ] tag "[Wh98NavPane]$999"  
81.                [+] CustomWin AfxWnd42s1  
82.                    [ ] tag "[AfxWnd42s]$999[1]"  
83.                [+] PageList PageList1  
84.                    [ ] tag "$998"  
85.                [+] StaticText StaticText1  
86.                    [ ] tag "$65535"  
87.                [+] CustomWin Index  
88.                    [+] multitag "[AfxWnd42s]Index"  
89.                        [ ] "[AfxWnd42s]$999[2]"  
90.                    [+] TextField TextField1  
91.                        [ ] tag "$14003"  
92.                    [+] TreeView TreeView1  
93.                        [ ] tag "$14005"  
94.                    [+] PushButton Display  
95.                        [+] multitag "Display"  
96.                            [ ] "$14004"  
97.        [ ]   
98.        [-] window DialogBox BookmarkDefine  
99.            [ ] tag "Bookmark Define"  
100.            [ ] parent SilkTestHelp  
101.            [+] StaticText BookmarkNameText  
102.                [+] multitag "Bookmark name:"  
103.                    [ ] "$65535"  
104.            [+] TextField BookmarkName1  
105.                [+] multitag "Bookmark name:"  
106.                    [ ] "$102"  
107.            [+] ListBox BookmarkName2  
108.                [+] multitag "Bookmark name:"  
109.                    [ ] "$103"  
110.            [+] PushButton OK  
111.                [+] multitag "OK"  
112.                    [ ] "$1"  
113.            [+] PushButton Cancel  
114.                [+] multitag "Cancel"  
115.                    [ ] "$2"  
116.            [+] PushButton Delete  
117.                [+] multitag "Delete"  
118.                    [ ] "$104"  

注意是
tag "Bookmark Define"
parent SilkTestHelp
使用动态tag的方法如下:
将上面的内容改成
tag "../Bookmark Define"
使用tag函数的方法如下:
    [ ] tag GetTag()
    [-] string GetTag()
        [-] if SilkTestHelp.Exists()
            [ ] return "../Bookmark Define"
下面这段代码可以用来测试:
1.        [-] testcase DynamicParent()  
2.            [ ] SilkTestHelp.SetActive()  
3.            [ ] SilkTestHelp.Bookmark.Define.Check()  
4.            [ ] sleep(1)  
5.            [ ] BookmarkDefine.Close()  
6.            [ ] sleep(1)  

作者: Zeng YueTian
网站: SilkTest 中文站
网址: http://blog.csdn.net/yuetiantian/
版权所有 - 转载时必须以链接形式注明作者和原始出处
作者: yuetiantian    时间: 2010-12-5 21:02
SilkTest天龙八部系列4-ChildWin
一直觉得SilkTest的ChildWin不好理解,今天大致看了一下,其实它和DialogBox每啥区别,也是一种window类型。帮助里 面说,典型的ChildWin就是文档窗口。在Windows上, ChildWin是MDI (多文档接口multi-document interface)子窗口,可以在main window中被最大化,最小化,调整大小的窗口,一般地,childwin有一个系统菜单。
下面是一个打开silktest onlinehelp define window的例子,原来的 define window是DialogBox,现在把它改成childwin一样能够被silktest识别出来。(具体区别请对照上一篇 SilkTest天龙八部系列3-动态父窗口)

1.        [+] testcase DynamicParent()  
2.            [ ] SilkTestHelp.SetActive()  
3.            [ ] SilkTestHelp.Bookmark.Define.Check()  
4.            [ ] sleep(1)  
5.            [ ] SilkTestHelp.bookmarkdefine.Close()  
6.            [ ] sleep(1)  
7.        [ ]   
8.        [+] window MainWin SilkTestHelp  
9.            [-] multitag "SilkTest Help"  
10.                [ ] "$C:\WINDOWS\winhlp32.exe"  
11.            [+] Menu File  
12.                [ ] tag "File"  
13.                [+] MenuItem Open  
14.                    [+] multitag "Open"  
15.                        [ ] "$1101"  
16.                [+] MenuItem PrintTopic  
17.                    [+] multitag "Print Topic"  
18.                        [ ] "$1103"  
19.                [+] MenuItem Exit  
20.                    [+] multitag "Exit"  
21.                        [ ] "$1105"  
22.            [+] Menu Edit  
23.                [ ] tag "Edit"  
24.                [+] MenuItem Copy  
25.                    [+] multitag "Copy"  
26.                        [ ] "$1203"  
27.                [+] MenuItem Annotate  
28.                    [+] multitag "Annotate"  
29.                        [ ] "$1202"  
30.            [+] Menu Bookmark  
31.                [ ] tag "Bookmark"  
32.                [+] MenuItem Define  
33.                    [+] multitag "Define"  
34.                        [ ] "$1301"  
35.            [+] Menu Options  
36.                [ ] tag "Options"  
37.                [+] Menu KeepHelpOnTop  
38.                    [ ] tag "Keep Help on Top"  
39.                    [+] MenuItem Default  
40.                        [+] multitag "Default"  
41.                            [ ] "$1470"  
42.                    [+] MenuItem OnTop  
43.                        [+] multitag "On Top"  
44.                            [ ] "$1471"  
45.                    [+] MenuItem NotOnTop  
46.                        [+] multitag "Not On Top"  
47.                            [ ] "$1472"  
48.                [+] MenuItem DisplayHistoryWindow  
49.                    [+] multitag "Display History Window"  
50.                        [ ] "$1453"  
51.                [+] Menu Font  
52.                    [ ] tag "Font"  
53.                    [+] MenuItem Small  
54.                        [+] multitag "Small"  
55.                            [ ] "$1462"  
56.                    [+] MenuItem Normal  
57.                        [+] multitag "Normal"  
58.                            [ ] "$1460"  
59.                    [+] MenuItem Large  
60.                        [+] multitag "Large"  
61.                            [ ] "$1461"  
62.                [+] MenuItem UseSystemColors  
63.                    [+] multitag "Use System Colors"  
64.                        [ ] "$1465"  
65.            [+] Menu Help  
66.                [ ] tag "Help"  
67.                [+] MenuItem Version  
68.                    [+] multitag "Version"  
69.                        [ ] "$1503"  
70.                [+] MenuItem AboutWinHelp2000  
71.                    [+] multitag "About WinHelp 2000"  
72.                        [ ] "$10001"  
73.            [+] CustomWin MS_WINTOPIC1  
74.                [ ] tag "[MS_WINTOPIC]$0"  
75.            [+] CustomWin MS_WINICON1  
76.                [ ] tag "[MS_WINICON]$0"  
77.                [+] PushButton HelpTopics  
78.                    [+] multitag "Help Topics"  
79.                        [ ] "$-1[1]"  
80.                [+] PushButton Back  
81.                    [+] multitag "Back"  
82.                        [ ] "$-1[2]"  
83.                [+] PushButton Print  
84.                    [+] multitag "Print"  
85.                        [ ] "$-1[3]"  
86.            [+] CustomWin Wh98NavPane1  
87.                [ ] tag "[Wh98NavPane]$999"  
88.                [+] CustomWin AfxWnd42s1  
89.                    [ ] tag "[AfxWnd42s]$999[1]"  
90.                [+] PageList PageList1  
91.                    [ ] tag "$998"  
92.                [+] StaticText StaticText1  
93.                    [ ] tag "$65535"  
94.                [+] CustomWin Index  
95.                    [+] multitag "[AfxWnd42s]Index"  
96.                        [ ] "[AfxWnd42s]$999[2]"  
97.                    [+] TextField TextField1  
98.                        [ ] tag "$14003"  
99.                    [+] TreeView TreeView1  
100.                        [ ] tag "$14005"  
101.                    [+] PushButton Display  
102.                        [+] multitag "Display"  
103.                            [ ] "$14004"  
104.            [ ] window bookmarkdefine = BookmarkDefine  
105.            [ ]   
106.        [ ]   
107.        [+] window ChildWin BookmarkDefine  
108.            [ ] tag "../Bookmark Define"  
109.            [+] StaticText BookmarkNameText  
110.                [+] multitag "Bookmark name:"  
111.                    [ ] "$65535"  
112.            [+] TextField BookmarkName1  
113.                [+] multitag "Bookmark name:"  
114.                    [ ] "$102"  
115.            [+] ListBox BookmarkName2  
116.                [+] multitag "Bookmark name:"  
117.                    [ ] "$103"  
118.            [+] PushButton OK  
119.                [+] multitag "OK"  
120.                    [ ] "$1"  
121.            [+] PushButton Cancel  
122.                [+] multitag "Cancel"  
123.                    [ ] "$2"  
124.            [+] PushButton Delete  
125.                [+] multitag "Delete"  
126.                    [ ] "$104"  

作者: Zeng YueTian
网站: SilkTest 中文站
网址: http://blog.csdn.net/yuetiantian/
版权所有 - 转载时必须以链接形式注明作者和原始出处
作者: yuetiantian    时间: 2010-12-5 21:02
SilkTest天龙八部系列5-类的属性
SilkTest的面向对象机制让用户可以为类定义属性,用property语句实现。除此以外用户在类中还可以定义成员变量和不可变的setting属性。也就是是说Silktest类中可以有以下三种属性/变量被使用到:
属性(用property申明)
成员变量
属性(用setting声明)

用property语句定义的属性可以让用户方便地使用=号来设置和获取类的某些属性,这里的属性是指逻辑上的一些属性,用来表现类的某些特征,这些特征 可能是动态变化的。例如在某个时间点,一个控件所包含的子控件个数(我们可以通过一个循环来遍历该控件来得到子控件的个数)又或者是一个页面上当前得到焦 点的控件名等等。

成员变量一般作为类的计算元素,或者是中间结果持有者,一般不用来直接表示复杂的逻辑内容。

至于setting属性可以对类的一些系统属性进行控制,例如,一个类是否继承使用父类的tag,又或者是使用哪些父类的tag.

值得注意的是property的声明是通过set和get两个函数实现的,所谓的逻辑也是在这两个函数中实现的。其中set只能有一个参数并且返回值是void,而get不能有参数,但是必须有返回值。set和get至少有一个要出现在property的声明中。
另外setting的限制是只能在类中赋值,并且是不可更改的。
下面是一个可以运行的例子: 最后一行的注释打开后会导致无法运行
1.         [-] winclass DemoDialog  
2.            [ ] Integer iZ = 30  
3.            [-] property iZPos  
4.                [-] void Set(integer i)  
5.                    [ ] iZ = i  
6.                [-] integer Get()  
7.                    [ ] return iZ  
8.            [ ] setting iXPos = 10  
9.            [ ] setting iYPos = 20  
10.        [ ]   
11.        [ ] window DemoDialog dd  
12.        [ ]   
13.        [-] testcase property_test()  
14.            [ ] // test setting  
15.            [ ] Print(dd.iXPos)  
16.            [ ] Print(dd.iYPos)  
17.            [ ] // test member variable  
18.            [ ] Print(dd.iZ)  
19.            [ ] // test property  
20.            [ ] dd.iZPos = 50  
21.            [ ] Integer iTemp = dd.iZPos  
22.            [ ] Print(iTemp)  
23.            [ ] // test member variable for class  
24.            [ ] Print(DemoDialog().iZPos)  
25.            [ ] Print(DemoDialog().iZ)  
26.            [ ] // change setting is not allowed  
27.            [ ] // dd.iXPos = 90  

作者: Zeng YueTian
网站: SilkTest 中文站
网址: http://blog.csdn.net/yuetiantian/
版权所有 - 转载时必须以链接形式注明作者和原始出处
作者: yuetiantian    时间: 2010-12-5 21:03
SilkTest天龙八部系列6-用open agent进行测试
silktest支持两种测试模式,一种是用classic agent,另一种就是用我们今天要介绍的open agent. open agent可以提供和classic agent差不多的录制回放功能。它们主要的差别在于所支持的对象类型,了解这些差别对于需要手工编辑的test case很有用。

classic agent支持的应用类型包括:
Windows Forms
Java AWT applications
Java SWT/RCP applications
Java Swing applications
Windows API-based client/server applications
Powerbuilder applications
Web applications
Web with ActiveX/Visual Basic applications
Java Applets
open agent支持的应用类型包括:
Adobe Flex
Windows API-based client/server applications
Java SWT/RCP applications
Windows Presentation Foundation (WPF) applications
xBrowser applications

需要注意的是open agent不支持下面这些record菜单下的功能,window location, class/scripted, class/accessibility,
method, defined window.
当你使用silktest的2008版本建立project的时候,向导会显示每种project类型使用的默认agent,不过这个是可以在运行case的
时候进行相应的更改。你可以在工具栏上选择想用的agent,也可以通过runtime Option来进行更改。
下面我用open agent来测试一下我们熟悉的老朋友,windows xp系统自带的计算器。下面是具体的步骤:
1. 先从附件中运行计算器
2. 打开silktest 2008,新建一个project "openagent",可以简单地选择类型为generic->open agent
3.选择basic workflow, 然后点击工具栏上的enable extensions,然后在弹出的对话框中选择列出来的计算器应用,它的name应
该是calc.exe。在click对话框下面的"enable extensions"按钮后就可以close对话框了。
4.新建一个test frame,在弹出的对话空中选择计算器应用,然后点击OK按钮。这个时候,计算器的定义会被存储在默认的
frame.inc文件中。
5.关闭计算器
6.新建一个calc_test.t,在其中输入如下的代码。
[-] testcase calc_test()
[ ] 计算器.SetActive()
[ ] 计算器.Close()
7.运行,你会发现用open agent运行一个testcase也很容易。
作者: Zeng YueTian
网站: SilkTest 中文站
网址: http://blog.csdn.net/yuetiantian/
版权所有 - 转载时必须以链接形式注明作者和原始出处
作者: yuetiantian    时间: 2010-12-5 21:03
SilkTest天龙八部系列7-dynamic object recognition

在测试web应用时,我们常常需要面对web页面对象变化频繁,并且使用预定义方式识别对象慢的困难。为了解决这些问题,silktest引入了 dynamic object recognition技术,它使用xpath来查找和识别界面上的对象。它可以使用Find和FindAll方法来识别这些对象,从而避免了在页面更改 后不得不频繁改变frame.inc的问题。

下面我用一个简单的项目来演示一下如何使用dynamic object recognition技术来测试borland提供的web gmo应用。
1. 新建一个xbrowser的project名为gmo
2. 打开IE输入我们要测试的web页http://demo.borland.com/gmopost/
3. 在silktest中,点击工具栏上的enable extensions,在出现的enable extensions对话框中,选择iexplorer应用的Welcome to Green Mountain Outpost条目。 silktest会自动为其选中win32和xbrowser等extensions功能,你需要点击"enable extensions"按钮来激活它。然后点击close按钮关闭该对话框。
4. 点击basic workflow工具栏上的set recovery system按钮为系统设置一个appstate GMO。这是silktest会自动为你生成一个frame.inc文件,内容如下所示:

1.        [ ] const wMainWindow = InternetExplorer  
2.        [ ]   
3.        [-] window BrowserApplication InternetExplorer  
4.         [-]  multitag TAG_IS_OPEN_AGENT  
5.          [ ]  "InternetExplorer"  
6.         [ ]   
7.         [ ] // The working directory of the application when it is invoked  
8.         [ ]  const sDir = "C:\Documents and Settings\ZengYuetian\桌面"  
9.         [ ]   
10.         [ ] // The command line used to invoke the application  
11.         [ ]  const sCmdLine = """C:\Program Files\Internet Explorer\iexplore.exe"" "  
12.         [ ]   
13.         [ ] // The first window to appear when the application is invoked  
14.         [ ] // const wStartup = ?  
15.         [ ]   
16.         [ ] // The list of windows the recovery system is to leave open  
17.          
18.         [ ] // const lwLeaveOpen = {?}  
19.        [ ]   

5.现在你需要手工加入一个appstate GMO
[-] appstate GMO() basedon DefaultBaseState
[ ] window browser = InternetExplorer.Find(".//BrowserWindow")
[ ] browser.navigate("http://demo.borland.com/gmopost/")
它的意义在于运行这个appstate会让浏览器自动导航至待测web页面http://demo.borland.com/gmopost/。 同时我们还应该注意到其第二行中使用了Find函数来查找一个XPath为.//BrowserWindow的控件,该控件并未在我们的 frame.inc中声明,这就是dynamic object recognition技术和通常我们用的先定义控件后使用的方法最大不同。
6. 新建一个testcase文件gmo_test.t,用record菜单下面的window identifiers来识别页面上的enter GMO online按钮,这个时候你会采集到如下的dynamic object recognition ".//DomButton[@language='JavaScript' and @type='button' and @name='bSubmit' and @value='Enter GMO OnLine']",这个就是该按钮的的XPath,我们并不需要所有的内容,只需要能够唯一标识该按钮的一部分内容,这里我们选 择.//DomButton[@name='bSubmit']即可。
7. 在gmo_test.t中输入下面的内容,该测试用例用来进入gmo online page
view plaincopy to clipboardprint?
1.        [-] testcase goto_online() appstate GMO  
2.         [ ] window browser = InternetExplorer.find(".//BrowserWindow")  
3.         [ ] browser.find(".//DomButton[@name='bSubmit']").click()  

8. 运行一下,看看测试用例是否带我们进入了http://demo.borland.com/gmopost/online-catalog.htm页面。
作者: Zeng YueTian
网站: SilkTest 中文站
网址: http://blog.csdn.net/yuetiantian/
版权所有 - 转载时必须以链接形式注明作者和原始出处
作者: kettleyang    时间: 2010-12-25 16:51

作者: asks_zhuang    时间: 2011-1-6 11:36
class,扩充class本身的定义;
这也是silktest得到众多应用的很重要的原因。




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2