我们来分析一下这段代码。
一开始声明了一个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语句申明的父窗口并不存在,那么该对象无法被正确识别。
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
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. [ ]