自己动手写Web自动化测试框架(3):操纵Web控件

发表于:2010-3-25 13:23

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:colblog.net    来源:51Testing软件测试网采编

  首先我们用ie.Document对象得到了HTMLDocument。目的没什么可说的,因为我们需要HTMLDocument得到下面的控件。而这里之所以使用强制类型转换,是因为Document对象在这里返回一个object的引用,但其实是一个HTMLDocument的实例。所以转换一下就好了,在mshtml里面,这种情况还不少,在msdn上有详细的讲解,使用的时候查一下就好了。

  然后使用HTMLDocument.getElementById方法,直接从Document里面按照ID取出想要的控件,返回一个 IHTMLElement,IHTMLElement是HTMLElement的抽象,所有的HTML的tag都可以是一个IHTMLElement,返回这样的一个引用,我们在知道将会返回什么类型的情况下,可以使用强制类型转换来把对象转成我们想要的引用。就像上面我们所做的,返回的其实是一个 Input tag,所以我们要把他转换成HTMLInputElement就好了。

  下面一句我们直接对这个对象的value进行设置,就可以完成在关键词文本框里面输入我们想要的关键词的动作。

  接下来我们要点击搜索按钮:

//得到一个按钮

Console.WriteLine("Clicking Submit ...");
HTMLInputElement submit = (HTMLInputElement)doc.getElementById("sb");
submit.click();
Thread.Sleep(2000);

  有了上面文本框的解释,这一段代码就容易多了吧。这里不在赘述。

  聪明的读者一定会问:我们现在使用ID查询控件,如果我们的控件没有ID怎么办?如果ID是重复的怎么办?

  上面的两种情况都是完全可能的,而且在实际中几乎占据了大部分的情况。(不过ASP.NET里面的控件倒是都有ID,使用这种方法比较方便。)我们下面的例子就是去点击百度首页右上角的登录超级链接。

  首先我们分析一下,登录超级链接是放在一个id为u的div里面,而登录超级链接是没有ID的。我们的思路就是先找到这个id为u的div,然后找他的chidren找到我们想要的这个超级链接,下面是源代码:

//得到一个链接

Console.WriteLine("Clicking Login Button ...");
IHTMLElement userPanel = doc.getElementById("u");
IHTMLElementCollection HyperLinks = ((IHTMLElement2)userPanel).getElementsByTagName("a");
IHTMLElement login = (IHTMLElement)HyperLinks.item(null, 0);

login.click();

  首先我们得到了那个id为u的div,命名为userPanel。这一步和上面没啥区别。

  下面一个语句我们得到了userPanel的控件的所有tag为a的控件,也就是所有的超级链接。这里有一个小小的需要注意的地方,我们看到这个语句吧IHTMLElement对象强制类型转换成了IHTMLElement2,很有意思,为啥会这样呢?其实IHTMLElement有4个这样的兄弟,他们之间的方法不同,可以互相转换,我们想要的getElementsByTagName在IHTMLElement2下面,所以我们就强制类型转换到IHTMLElement2。这个方法返回一个IHTMLCollection。我们用HyperLinks来储存这个引用。

  因为userPanel的子控件只有登录超级链接这一个,所以我们直接使用index为0来取道这个对象就好了。IHTMLElementCollection里面的item方法详见msdn,我们只需要把第二个index设置为0,就可以取到第一个子对象。


相关链接:

自己动手写Web自动化测试框架(7):框架架构的设计

自己动手写Web自动化测试框架(6):自动化测试框架的规划

自己动手写Web自动化测试框架(5):判断浏览器是否加载完成

自己动手写Web自动化测试框架(4):验证Web控件

自己动手写Web自动化测试框架(2):打开和操纵IE

自己动手写Web自动化测试框架(1) :概述

22/2<12
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号