首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

7.5  验证Web页面上HTML元素的值

问题

如何验证Web页面上的HTML元素是否具有某个给定值,从而判断测试场景通过与否。

设计

通过InternetExplorer对象的Document属性创建一个引用,这个引用指向Web应用程序的document body。然后通过mshtml.dll库里的getElementByTagName()方法和item()方法得到你想要检查的特定元素。接下来就可以通过InnerText属性取回HTML元素的实际值。

方案

设想某个待测Web页面包含几个<p>元素,以及一个ID为“div2”的<div>元素和一个单独的<select>元素。下面的代码将在<p>元素中查找“aloha”,在<div>元素中查找“adios”,在<select>元素中查找“ciao”:

bool pass = true;

// 获得HTMLDocument 对象theDoc ——参见7.4节

Console.WriteLine("Seeking 'aloha' in <p>[2]");

HTMLParaElement paraElement =

(HTMLParaElement)theDoc.getElementsByTagName("p").item(2, null);

if (paraElement.innerText.ToString().IndexOf("aloha") >= 0)

{

  Console.WriteLine("Found target 'aloha");

}

else

{

  Console.WriteLine("*Target string not found*");

  pass = false;

}

Console.WriteLine("Seeking 'adios' in <div id='div2'>");

HTMLDivElement divElement =

  (HTMLDivElement)theDoc.getElementsByTagName("div").item("div2", null);

if (divElement.innerText.ToString().IndexOf("adios") >= 0)

{

  Console.WriteLine("Found target 'adios'");

}

else

{

  Console.WriteLine("*Target string not found*");

  pass = false;

}

Console.WriteLine("\nSeeking 'ciao' in list box");

HTMLSelectElement selElement =

  (HTMLSelectElement)theDoc.getElementsByTagName("select").item(0, null);

if (selElement.innerText.ToString().IndexOf("ciao") >= 0)

{

  Console.WriteLine("Found target 'ciao'");

}

else

{

  Console.WriteLine("*Target string not found*");

  pass = false;

}

item()方法的参数稍微有些麻烦。第一个参数可以是整型(这时候它被解释为从0开始的一个索引值),也可以是字符串(这时候它被解释为tag名字)。item()的第二个参数也是一个索引值,但只有当item()方法返回的是一个集合而不是单个对象(atomic object)的时候,才会用到这个参数。在上述方案中,下面的代码:

getElementsByTagName("p").item(2, null);

得到所有<p>元素的一个集合,然后返回索引值为[2]的特定<p>元素,也就是第3个<p>元素。

注解

我们经常需要通过编程的方式来检查某些待测页面上HTML元素的值,但有时候这些HTML元素的值并不属于任何子的HTML元素。下面这种方法可以解决这个问题:

Console.WriteLine("Seeking 'howdy' in body");

HTMLBody body =

  (HTMLBody)theDoc.getElementsByTagName("body").item(0, null);

if (body.createTextRange().findText("howdy", 0, 0) == true)

{

  Console.WriteLine("Found target 'howdy'");

}

else

{

  Console.WriteLine("*Target string not found*");

  pass = false;

}

我们可以得到一个document body的引用并通过textRange对象和它的findText()方法查找特定的字符串。findText()方法有三个参数:第一个参数是必填的目标字符串,后两个是可选参数。第一个可选参数用于指定查找的起始位置。如果该参数为正数,则从textRange的起始位置向前跳过几个字符开始查找。如果该参数为负数,则从textRange的末尾向后跳过几个字符开始查找。如果该参数为0,则从textRange的起始位置开始查找整个字符串。findText()的第二个可选参数用于指定查找的类型,其取值见表7-1:

表7-1  findText()的搜索类型标识

含义

0

部分匹配(默认)

1

向后匹配

2

只匹配整个单词

4

大小写敏感

131072

通过比较字节进行匹配

536870912

匹配发音标记(diacritical marks)

1073741824

匹配克什米尔(Kashida)字符

2147483648

匹配阿拉伯(AlefHamza)字符

这些标识的值是可以进行组合的。因此,下面的调用:

bool result = body.createTextRange().findText("foo", 0, 6);

进行的是针对整个body对象的大小写敏感、全字匹配的查找。请注意,如果第一个可选参数为正数(意味着跳过前面几个字符然后开始向前查找),并且第二个可选参数为1(意味着向后查找),则这两者之间是不一致的。

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论