6.2 判断Web程序的状态
问题
如何判断待测Web程序的状态。
设计
在上述方案中,TestCode.html包含测试套件的JavaScript代码,我们需要在这个网页中加入updateState()函数,这个函数把全局的状态计数器加1,然后调用主测试套件的逻辑代码。
方案
<html>
<head>
<script language="JavaScript">
function updateState()
{
parent.loadCount++;
if (parent.loadCount > 1) //如果需要完全自动执行,需要把条件改为 > 0
runTest();
} // updateState()
function runTest()
{
// 此处添加runTest()的代码
}
// 其他测试函数略
</script>
</head>
<body bgColor="#aaff99">
<h3 style="font-size: 14; font-family: Verdana">UI Test Script
</h3>
<p><input type="button" value="Run UI Test" onclick="runTest();">
</p>
<p>Actions:</p><p><textarea id="comments" rows="15" cols="34">
</textarea></p>
<p>Test Result = <input type="text" name="result" size="12"></p>
</body>
</html>
注解
如果创建一个结构如6.1节所描述的测试套件,当待测Web程序加载到测试套件的右frame之后,程序的控制权会传给updateState()函数,这个函数是左边frame所包含页面的脚本的一部分。这个用于表示状态更新的函数首先会把全局的状态计数器加1:
parent.loadCount++;
因为状态计数器位于主测试套件所在的页面,所以必须加上parent关键字才能访问它。接下来,updateState()函数检查全局状态计数器的值是否大于1。因为计数器的初始值是0,当测试套件第一次启动时(这时候,会加载待测的Web程序),计数器的值为1。如果检测到计数器的值小于1,则if语句的条件为false,加载页面的线程停止执行。通过这种方法,可以先检视测试套件和待测的Web程序,然后再手动触发自动化测试程序。如果想要完全自动运行,则可以把条件语句改为:
if (parent.loadCount > 0)
runTest();
这个判断条件在测试套件首次加载页面时,即为true,程序的控制权会马上转移到runTest()函数。
在本方案中,测试套件左边frame所包含的网页名为TestCode.html。如前所述,对于完全自动进行的测试来说,WebAuto.html并不需要任何UI。但是,如果想要手动运行自动化测试套件,还是需要有一些最基本的UI元素。
<body bgColor="#aaff99">
<h3 style="font-size: 14; font-family: Verdana">UI Test Script</h3>
<p><input type="button" value="Run UI Test" onclick="runTest();"></p>
<p>Actions:</p>
<p><textarea id="comments" rows="15" cols="34"></textarea></p>
<p>Test Result = <input type="text" name="result" size="12"></p>
</body>
我们应该给包含用于自动化测试的JavaScript代码的网页取一个标题(title)。这样,其他测试人员和开发人员就可以很清楚地区分哪一个frame包含待测程序,哪一个frame包含自动化测试程序。除此以外,还应该提供一个按钮控件,这样测试人员就可以像前面所说的那样手工触发自动化测试程序。HTML元素<textarea>可以很方便地用来显示有关测试进度信息的一些消息,如图6-1所示的那样。最后,应该再加上一个文本框,这样整个测试场景是否通过,其结果就可以区别于其他的进度信息,而单独显示出来。







