SilkTest Q&A 9

时间:2021-12-24 06:49:31

Q81:我应该如何存取excel sheet里面的空字符串?
A81:定制代码如下:
解决方案1:
[-] if sText!=NULL
[ ] Page.tfldName.SetText(sText) // do the operation
[-] else
[ ] Page.tfldName.CleartText()
永久解决方案:将下面的winclass加入你的代码中,如果你的是web应用就直接拷贝粘贴,否则将htmlTextField改成TextField,这样Text field将不会因为空值而产生异常。
[-] winclass HtmlTextField: HtmlTextField
[ ]
[-] void SetText(String sText optional)
[+] if sText==NULL
[ ] this.ClearText()
[+] else
[ ] derived::SetText(sText)

Q82:如何用负向测试方法测试一个webpage?我需要捕捉所有的错误页么?
A82:捕捉所有的错误信息会增加你的脚本长度…捕捉一个页面并且使用”*”从而试着使identifier能够对所有的页面通用。
如果错误页以text message的方式出现,得到该text的索引(一般它是固定的)并且得到测试中的值从而与期望值进行比较,例如:
if BrowserPage.HtmlText ("#1").GetText () == "Invalid date"
Print ("Pass")
else
Print ("Fail")
假设第一次,你输入一个无效的mail ID,结果错误页的tag是” Error Page - Invalid mail ID”,第2次你输入一个无效的日期,结果错误页的tag是"Error Page - Invalid date"。为了泛化错误页,将tag改成"Error Page - Invalid*"或者"Error Page*",来表示这里出现了错误页。

Q83.如何用cmd命令行运行.bat文件,从而执行test plan?
A83:可以使用如下方法设置。
- Enter Plan File Path - e.q - c:/test
- Plan File Name - e.q - sample.pln
语法为"C:/Program Files/Segue/SilkTest/partner.exe" -r "/.pln"
例如:"C:/Program Files/Segue/SilkTest/partner.exe" -r "c:/test/sample.pln"
将上面一行拷贝成.bat文件,然后用cmd命令行运行它。

Q84:从开发者的角度来看,SilkTest内部实际上是如何工作的?
A84:
答案1:
Silktest和GUI交互,将操作自动提交给应用程序。也就是,silktest驱动应用。
它由不同的两部分软件组成:
(i)silktest host软件
(ii)4Test Agent软件
host软件是你用来开发,编辑,编译,运行,调试你的4Test脚本和test plan的程序。
4Test Agnet是将你的4Test脚本翻译成GUI相关命令的软件。一个Agent可以运行在本地的host机器上,在网络环境中,任何数量的Agent可以运行在远程的机器上。
答案2:
Silktest和其他GUI自动工具通过以下方式工作:
1.你需要录制应用程序的GUI。这相当与告诉silktest它将运行在什么上面。
2.使用录制的应用程序的GUI来编写testcase的脚本。
3.在一个新构建的版本上,再次执行你的testcase。
任何失败可能由以下情况导致:
1.应用程序错误
2.脚本错误
假设是脚本的错误,可能的原因如下:
1.逻辑错误
2.产品行为的改变导致脚本错误(因此,脚本需要被更新)
3.或者,应用程序的GUI发生了变化,这意味着你需要更新GUI的记录。
当一个自动工具录制GUI时,它主要通过该GUI特定的属性捕捉每个GUI对象,该属性在下一次自动执行时用来标识该GUI。
为了给你举例,让我考虑在一个典型的用户登录页中,有三个GUI实体。
1.用户名域
2.密码域
3.登录按钮
假设登录按钮有一个htmlid=login,silktest将会记录该GUI为HTMLPushButton,其id属性等于login(该文本标题可能根据button的不同而变化,比如:”Log in”)
如果已经决定将该按钮的标题改成”Sign In”,而不改变htmlid属性,这种情况下,silktest还是能够正确地回放该GUI的自动脚本。
但是万一,在下一个构建中,开发人员保持该按钮的标题名,但是改变其html id为”signin”,silktest将无法认出该按钮,即使对于用户来说看上去什么也没有改变。
这就是大部分自动测试工具工作的基本原理。

Q82:如何用负向测试方法测试一个webpage?我需要捕捉所有的错误页么?
A82:捕捉所有的错误信息会增加你的脚本长度…捕捉一个页面并且使用”*”从而试着使identifier能够对所有的页面通用。
如果错误页以text message的方式出现,得到该text的索引(一般它是固定的)并且得到测试中的值从而与期望值进行比较,例如:
if BrowserPage.HtmlText ("#1").GetText () == "Invalid date"
Print ("Pass")
else
Print ("Fail")
假设第一次,你输入一个无效的mail ID,结果错误页的tag是” Error Page - Invalid mail ID”,第2次你输入一个无效的日期,结果错误页的tag是"Error Page - Invalid date"。为了泛化错误页,将tag改成"Error Page - Invalid*"或者"Error Page*",来表示这里出现了错误页。

Q83.如何用cmd命令行运行.bat文件,从而执行test plan?
A83:可以使用如下方法设置。
- Enter Plan File Path - e.q - c:/test
- Plan File Name - e.q - sample.pln
语法为"C:/Program Files/Segue/SilkTest/partner.exe" -r "/.pln"
例如:"C:/Program Files/Segue/SilkTest/partner.exe" -r "c:/test/sample.pln"
将上面一行拷贝成.bat文件,然后用cmd命令行运行它。

Q84:从开发者的角度来看,SilkTest内部实际上是如何工作的?
A84:
答案1:
Silktest和GUI交互,将操作自动提交给应用程序。也就是,silktest驱动应用。
它由不同的两部分软件组成:
(i)silktest host软件
(ii)4Test Agent软件
host软件是你用来开发,编辑,编译,运行,调试你的4Test脚本和test plan的程序。
4Test Agnet是将你的4Test脚本翻译成GUI相关命令的软件。一个Agent可以运行在本地的host机器上,在网络环境中,任何数量的Agent可以运行在远程的机器上。
答案2:
Silktest和其他GUI自动工具通过以下方式工作:
1.你需要录制应用程序的GUI。这相当与告诉silktest它将运行在什么上面。
2.使用录制的应用程序的GUI来编写testcase的脚本。
3.在一个新构建的版本上,再次执行你的testcase。
任何失败可能由以下情况导致:
1.应用程序错误
2.脚本错误
假设是脚本的错误,可能的原因如下:
1.逻辑错误
2.产品行为的改变导致脚本错误(因此,脚本需要被更新)
3.或者,应用程序的GUI发生了变化,这意味着你需要更新GUI的记录。
当一个自动工具录制GUI时,它主要通过该GUI特定的属性捕捉每个GUI对象,该属性在下一次自动执行时用来标识该GUI。
为了给你举例,让我考虑在一个典型的用户登录页中,有三个GUI实体。
1.用户名域
2.密码域
3.登录按钮
假设登录按钮有一个htmlid=login,silktest将会记录该GUI为HTMLPushButton,其id属性等于login(该文本标题可能根据button的不同而变化,比如:”Log in”)
如果已经决定将该按钮的标题改成”Sign In”,而不改变htmlid属性,这种情况下,silktest还是能够正确地回放该GUI的自动脚本。
但是万一,在下一个构建中,开发人员保持该按钮的标题名,但是改变其html id为”signin”,silktest将无法认出该按钮,即使对于用户来说看上去什么也没有改变。
这就是大部分自动测试工具工作的基本原理。

85. 我无法简单的使用"DialogBox (" ").Close ()" 来关闭对话框。。。

在对话框上有一个按钮,一点,就会弹出第二个BrowserChild 。这个窗口没有一个常规的工具栏,它实际上是有一段Javascript 函数(openWindow) 打开的。由于某些原因,我不能简单的用"DialogBox (" ").Close ()" 来关闭它。

事实上,这依赖于第二个窗口是如何申明的。
在浏览器上,有一个弹出窗口,是用 JavaScript 做的,它没有包含任何浏览器的元素(没有工具栏,没有状态栏,没有位置,等等)。所以呢, silktest 将该窗口认为是对话框,但是直接申明它为对话框的时候又会导致失败。因为,它确实是个浏览器窗口。所以,我决定让 silktest 申明它为对话框,通常是如下的形式:
[code]
[-] window DialogBox DBCreateOffer
[ ] tag "Requisition Create?Edit"
[-] window BrowserChild BCCreateOffer
[ ] tag "Create Offer"
[ ] parent "CustomBrowser"
[/code]
然后,我修改 Silktest 自动生成的声明,然后让 BrowserChild 成为对话框的一部分:
[code]
[-] window DialogBox DBCreateOffer
[ ] tag "Requisition Create?Edit *"
[-] BrowserChild BCCreateOffer
[ ] tag "Create Offer"
[/code]
现在,我就可以直接通过调用 DBCreateOffer.Close() 来关闭它了。

87. 选择 ListBox 中 Item 的时候报错

SilkTest 从一个ListBox (JavaJFCListBox )中选择item 的时候报如下的错误
[ ] *** Error: Control is not responding
[ ] Occurred in Select
[ ] Called from LetterEditTool at FabEditorScript.t(1060)
但是有的时候执行却不会报错,有人能给点帮助么?

答:
这是一个catch-all 错误信息,一般是由Select( ) 尝试选取ListBox ,TreeView ,ListView 等控件中的项目时出现的。解决这个问题,可以在导致错误的那一行前面加上下面这行代码:
Agent.SetOption(OPT_VERIFY_RESPONDING, FALSE)

88. 要测试的GUI 上面有一个Cancel 按钮,它的热键是Alt-c

问:在一个待测GUI 上有一个Cancel 按钮,它的热键是Alt-c 和Alt-C (大小写都支持),手工测试的时候,这两组热键都能工作。
但是在自动测试的时候,TypeKeys ("") 可以工作,而TypeKeys ("") 却不能工作,我还尝试了下列代码
Presskeys ("")
TypeKeys ("")
ReleaseKeys ("")

Presskeys ("")
TypeKeys ("")
ReleaseKeys ("")
仍然不能工作,有人能帮忙么?

答:如果你的应用是标准的,并且热键被很好的定义了。那么理想情况下,"") 和 ("" 都应该能够工作。不过,看来你的情况不是这样的,那么请尝试下面的工作。
SilkTest 提供了模拟一组键被同时按下的功能,你可以通过角括号和连字符的组合来实现,请尝试下面的代码:
("")
不是 TypeKeys ("")
不是TypeKeys ("")
不是TypeKeys ("")
也不是
TypeKeys ("")
TypeKeys ("")

解决了,不过当CapsLock 没有启用的时候,只有TypeKeys ("") 能够工作。如果我手动将CapsLock 启用,然后执行[TypeKeys ("")] ,并不能work 。

90. 有人知道如何在silktest中转义空格么?

例如,我有一个可执行文件,位于C:/Program Files/xyz/abc.exe
我现在需要将'Program Files'中的空格转义,该如何做?

答案:

首先,你可以使用短型路径,例如:C:/Progr~1/xyz/abc.exe

其次,你可以用引号来处理空格,例如:

string sCmdLine = "C:/Program Files/xyz/abc.exe"
Sys_Execute(sCmdLine)