6.4 验证待测Web页面上HTML元素的值
问题
如何验证待测Web页面上某个HTML元素的值,并且设置测试场景的结果为pass或fail。
设计
编写一个verify()函数,这个函数接受两个参数,一个参数为控件元素的引用,另一个参数为该元素的期望值。然后在这个函数里设置用于表示测试结果通过与否的全局变量的值,这个变量的初始值为true,如果控件的实际值与期望值不等,则把该全局变量设为false。
方案
function verify(ctrl, val)
{
if (parent.rightFrame.document.all[ctrl].value != val)
parent.pass = false;
}
注解
verify()函数接受两个参数:一个参数为控件元素的引用,另一个参数为该元素的期望值。这个函数假定在6.1小节所述的测试套件结构页面里存在一个叫作pass的全局变量。请注意,要访问右侧frame里待测Web程序的控件,必须通过parent关键字先到“上一级”页面,然后再通过frame名称进入“下一级”的待测程序页面。如果指定控件的实际值与期望值并不相等,那么全局变量pass会被设为false。这种机制假定变量pass的初始值为true。换句话说,这里所使用的逻辑是:假定测试用例可以通过,在每次状态发生改变之后,检查控件的值,看是否有与期望值不一致的情况存在;如果有,则把pass的值设为false。另外一种方法是:假定测试用例会失败,然后在每次状态发生改变之后,检查一系列的控件的值,看它们与期望值是否一致,如果所有的期望条件/值都得到满足,则把pass设为true。
本章所讲述的技术,其核心问题是如何通过IE DOM来访问Web页面上的HTML元素。这是个很大的主题,因为IE DOM有超过500个属性和几乎同样数量的方法。从测试的角度来看,为了验证HTML元素的状态,大多数时候用的都是value属性,但是其他一些属性有时候也很管用。例如,假设需要检测待测Web页面的背景颜色是否是纯红色,则可以用下面的代码:
if (parent.rightFrame.document.bgColor == "#FF0000")
backgroundIsRed = true;
再举一个例子,假设我们想要检测某个Label元素对用户是否可见,则可以这么编写代码:
if (parent.rightFrame.document.all["Label1"].visibility == "visible")
logRemark("The Label control is visible");
在理解了本章讲述的这些技术所用到的测试结构之后,接下来需要做的就是深入地掌握IE DOM的相关知识。理解DOM越深入,则写出来的自动化测试程序功能就越强大。
还有一个常见的问题,当需要访问某个Web页面上的文本,而这段文本只是HTML body的一部分,并不属于任何其他的HTML元素。有一种方法可以解决这个问题,就是使用document.body.innerText属性。另一种方法是使用createTextRange()方法:
var trange = parent.rightFrame.document.body.createTextRange();
if (trange.findText("foo") == true)
logRemark("Found 'foo' on the Web page");
else
logRemark("No 'foo' found");







