测试 第二期杂志中的“关于 SQA GetProperty的使用”一文,对其中的一个问题产生了兴趣。文中提到,SQAGetProperty只能得到Object Property,无法得到Odject" name="description" />

如何在Robot脚本中使用Object Data

发表于:2007-04-29来源:作者:点击数: 标签:脚本何在robotdataobject
看了无忧 java script:;" onClick="javascript:tagshow(event, '%B2%E2%CA%D4');" target="_self"> 测试 第二期杂志中的“关于 SQA GetProperty的使用”一文,对其中的一个问题产生了兴趣。文中提到,SQAGetProperty只能得到Object Property,无法得到Odject
看了无忧javascript:;" onClick="javascript:tagshow(event, '%B2%E2%CA%D4');" target="_self">测试第二期杂志中的“关于SQAGetProperty的使用”一文,对其中的一个问题产生了兴趣。文中提到,SQAGetProperty只能得到Object Property,无法得到Odject Data(如Contents等),这是完全正确的。但是有没有什么方法可以得到Odject Data呢?凑巧看到51testing论坛上也有人提了相同的问题,但没有得到解答,于是就想研究一下,看看能不能找到可行的方法。大家都知道,用Inspector可以获取Object Property和Odject Data,说明这两者都是可以被识别的,而Object Property可以使用SQAGetProperty函数在脚本中得到,从而可以很方便的在脚本中通过对Object Property值的判断来进行脚本行为的控制。那么同样可以用Inspector获取的Odject Data,似乎也应该有相应的函数可以在脚本中使用以获取Odject Data。于是我就在SQABasic language的HELP中仔细查找了一下,但是很不走运,并没有找到与之相关的函数(可能确实没有这类函数,也可能是我水平有限,没找到;如果哪位前辈知道有这类函数的话,希望能指点一下,不胜感激)。那么一点办法都没了吗?那倒也不尽然。毕竟Robot');" target="_self">Robot还是使用到Odject Data的,在验证点中就专门有一个Odject Data验证点,既然验证点有用到,那么我们就一定能找到方法,在脚本中获取Odject Data,从而能象使用SQAGetProperty那样控制脚本行为(如果Robot自己都不用到,那就比较麻烦了)。按照这个思路,我就先研究了一下Odject Data验证点。当在脚本中插入一个Odject Data验证点时,会生成一个BaseLine File(后缀名grd),用于保存插入验证点时用作预期结果的Odject Data。当回放脚本时,如果实际的Odject Data与预期的Odject Data一致,在Build目录下会生成一个grd文件,文件名中含有exp,用于存放预期的Odject Data(因为实际的Odject Data与预期的一致,因此就不保存实际的Odject Data了);如果实际的Odject Data与预期的Odject Data不一致,则除了生成前面所说的文件外,还会生成一个grd文件,文件名中含有act,用于存放回放时实际的Odject Data,而这些grd文件的Path都是符合特定规则的,因此我们完全可以给出保存实际Odject Data的grd文件的Path,从该文件中读取我们所需要的Odject Data的值。这样,我们就可以在脚本中通过判断Odject Data的值来控制脚本行为。另外,还有一点要说明的是,有些Odject的Odject Data不止一种,例如对于HTMLDocument而言,其Odject Data包括Contents,HTML Text,Document URL和Document Title四种,想获取哪一种的值,就要在插入验证点时选择该项,再去读取相应的grd文件即可。下面结合一个实际的例子,详细说明一下如何在脚本中读取Odject Data的值。

    首先建立一个工程shiyan,工程位于F:\Rational\project目录下。然后新建一个Script,名为111。以51testing的首页作为被测对象。选择插入Odject Data验证点,验证点的Name为Odject Data,Wait state根据情况设置,Expected result选择Pass。确定后选择Odject:HTMLDocument,HTMLTitle=51Testing软件测试网:软件测试的专业网站。然后在data test中选择Contents,再使用缺省设置确定后完成验证点的添加。这时在目录F:\Rational\project\shiyan\TestDatastore\DefaultTestScriptDatastore\TMS_Scripts\vp下就会产生一个基线文件111.Object Data.base.grd,文件的内容即是插入验证点时所选Object的Contents。这时要作2处小小的修改:首先,需要修改一下该基线文件的内容,使其内容在实际运行中永远不会出现,即让该验证点永远不会通过,这样回放时才会生成保存实际Contents的grd文件,可以直接打开基线文件修改或在Robot的Asset pane中双击验证点以打开Grid Comparator,在其中修改基线文件;其次,由于该验证点是永远不会通过的,其结果我们并不关心,不需要出现在log中,否则反而影响我们观察log,因此,需要将其从log中去掉。这个只需要在脚本中验证点之前加入SQASuspendLogOutput即可,该验证点的结果便不会写入log中,然后再在验证点之后加上SQAResumeLogOutput以恢复输出log。完成以上工作后,回放该脚本时,当执行完验证点后,在F:\Rational\project\shiyan\TestDatastore\TMS_Builds\Build 1.Build\Default.LogFolder\111.Log\vp目录下会生成两个grd文件,其中一个名为111.Object Data.exp.grd,保存Contents的预期值;另一个名为111.Object Data.act????.grd(?代表一 个字母或数字,该文件的文件名每次运行脚本时都会不同,“act”后有随机的4位字母或数字),保存Contents的实际值。这样,在脚本中验证点后打开文件111.Object Data.act????.grd,即可读取想要的Contents值,以控制脚本行为。由于文件名中有4个随机字符,因此无法使用确切的Path来打开文件,在这里可以使用API函数FindFirstFile(具体用法参见MSDN),该函数可以在参数Path中使用通配符,即用“F:\Rational\project\shiyan\TestDatastore\TMS_Builds\Build 1.Build\Default.LogFolder\111.Log\vp\111.Object Data.act*.grd”作为Path,该函数会在VP目录下搜索符合条件的文件,当找到第一个符合条件的文件后(由于VP目录下只有一个这样的文件,因此可用此函数),打开该文件并返回该文件的句柄,并将该文件的一些信息保存到一个结构体中。得到文件句柄后,可以用API函数ReadFile读取文件中的内容。当使用完该文件后,再用API函数FindClose关闭所打开的文件。至此,我们就完成了对“Odject:HTMLDocument,HTMLTitle=51Testing软件测试网:软件测试的专业网站”的Contents的获取。


版权声明:51testing软件测试网及相关内容提供者拥有ltesting.net内容的全部版权,未经明确的书面许可,任何人或单位不得对本网站内容复制、转载或进行镜像。51testing软件测试网欢迎与业内同行进行有益的合作和交流,如果有任何有关内容方面的合作事宜,请联系我们


原文转自:http://www.ltesting.net

...

热门标签