原创:http://www.colblog.net/node/136

上面的两次课程我们介绍了mshtml和SHDocVw的一些用途,以及如何打开并且附加到IE上,实现IE的宏观上的控制。

这次我们将会用代码找到我们想要的控件,然后对控件进行一些操作。

首先我们引入一个很好的IE控件:Internet Explorer Developer Toolbar,这个控件可以帮助我们方便的找到我们想要的控件的属性。

安装好这个控件之后,我们就可以方便的找到每一个控件的ID,或者其他属性了,如下图

IE Developer

注意,打开IE Developer Toolbar之后,要点选下面的鼠标按钮,才可以用鼠标来选择我们想要的控件。有了这个控件,我们就不用去查看源文件来找到我们想要的信息了。其他的功能这里不多说了。

接下来我们以百度的三个控件为例,分别告诉大家如何使用ID得到TextBox,如何点击使用ID得到的Button,如何使用子控件缩小范围的方法得到一个HyperLink。

首先我们修改上次的代码,把IE指到百度去:

Console.WriteLine("Navigating ...");

object o = null;
ie.Navigate("baidu.com", ref o, ref o, ref o, ref o);
Thread.Sleep(2000);

代码我们在 《【生生不息原创】自己动手写Web自动化测试框架2 - 打开和操纵IE》 都讲解过了。只有一点,我们在完成IE的跳转之后,等待了2秒钟的时间,原因是IE的工作是需要时间的,我们在后面的测试框架部分会讲解如何判断IE已经完成了页面的跳转,在这里为了让大家更好的了解我们本节的主题,只是用了简单的等待。

然后我们用IE Developer Tools得到了关键字文本框的ID是kw,所以我们用下面的代码在关键字文本框里面输入了我们想要的关键字:

//得到一个Text Box

Console.WriteLine("Inputing Keyword ...");

HTMLDocument doc = (HTMLDocument)ie.Document;

HTMLInputElement keyword = (HTMLInputElement)doc.getElementById("kw");

keyword.value = "colblog.net";

Thread.Sleep(1000);

首先我们用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自动化测试框架3 - 操纵Web控件相关推荐

  1. 使用 Python+Selenium + 第三方库实现的简单的 web 自动化测试框架 源码

    使用 Python+Selenium + 第三方库实现简单的 web 自动化测试框架,为 web 自动化测试编写更加便利和可维护. 一.配置(config) 1.1 说明 设置自动化案例运行时的属性值 ...

  2. python的web自动化框架实例_Selenium基于Python web自动化测试框架 -- PO

    关于selenium测试框架首先想到的就是PO模型,简单说下PO模型 PO模型的概念和理解: PO就是一个设计思想,将代码以页面为单位进行组织,针对这个页面上的所有信息.相关操作都放到一个类中,从而使 ...

  3. 2019 Selenium3与Python3实战开发Web自动化测试框架(三)

    说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 接着上一篇博客继续往下写 :2019 Selenium3与Python3实战开发Web自动化测试框架(二)_cdtaogang's ...

  4. 基于python的界面自动化测试-基于Selenium+Python的web自动化测试框架

    一.什么是Selenium? Selenium是一个基于浏览器的自动化测试工具,它提供了一种跨平台.跨浏览器的端到端的web自动化解决方案.Selenium主要包括三部分:Selenium IDE.S ...

  5. python selenium po_python+selenium基于po模式的web自动化测试框架

    一.什么是Selenium? Selenium是一个基于浏览器的自动化测试工具,它提供了一种跨平台.跨浏览器的端到端的web自动化解决方案.Selenium主要包括三部分:Selenium IDE.S ...

  6. java web典型模块大全_python+selenium基于po模式的web自动化测试框架

    一.什么是Selenium? Selenium是一个基于浏览器的自动化测试工具,它提供了一种跨平台.跨浏览器的端到端的web自动化解决方案.Selenium主要包括三部分:Selenium IDE.S ...

  7. 【万字长文】2022年最全的搭建Web自动化测试框架教程

    测试框架的设计有两种思路,一种是自底向上,从脚本逐步演变完善成框架,这种适合新手了解框架的演变过程.另一种则是自顶向下,直接设计框架结构和选取各种问题的解决方案,这种适合有较多框架事件经验的人.本章和 ...

  8. 从0开始搭建Web自动化测试框架

    前言: 测试框架的设计有两种思路,一种是自底向上,从脚本逐步演变完善成框架,这种适合新手了解框架的演变过程.另一种则是自顶向下,直接设计框架结构和选取各种问题的解决方案,这种适合有较多框架事件经验的人 ...

  9. 基于Selenium实现的web自动化测试框架

    目录 一.什么是Selenium? 二.自动化测试框架 三.自动化框架的设计和实现 四.需要改进的模块 五.总结 一.什么是Selenium? Selenium是一个基于浏览器的自动化测试工具,它提供 ...

最新文章

  1. 泰晤士最新排名出炉,这两所大学跌惨了
  2. 我看过的C++方面的好文章
  3. 【BZOJ 1095】 1095: [ZJOI2007]Hide 捉迷藏 (括号序列+线段树)
  4. centos7使用yum安装jdk并配置jdkhome
  5. javaweb 中的过滤器 包装器
  6. linux cut 命令(转)
  7. WebBIOS使用手册
  8. 五分钟学会python_关于五分钟学Python系列视频
  9. vb雅西高速计算机考试,雅西高速沿途风貌车拍八
  10. linux的telnet
  11. excel查找空值快捷键_有了这7个Excel中常用的小技巧,再也不用担心自己要加班了!...
  12. 大大学校园计算机市场分析,Acer笔记本计算机营销策略分析以大学生市场为例.doc...
  13. java opts参数_JVM内存JAVA_OPTS参数说明
  14. 2345好压去广告方法
  15. 西湖论剑2021杂项(misc)--YUSA的小秘密
  16. 盘点2015年英特尔旧金山IDF峰会上的黑科技
  17. 5G系统新型网络架构
  18. Python练手----字符串的密钥加密
  19. 那些年,Android音视频开发那些事儿
  20. Music List: 轻音乐

热门文章

  1. 这些代表了未来出行的交通工具,你注意到了吗?...
  2. 用计算器来进行计算10的几次方的问题
  3. Sqli_lib Less 5
  4. [转载]绝对耳目一新的搭配----眉豆炒虾酱(12道风靡城乡的
  5. JAVA开发者最常去的20个英文网站(转)
  6. .swf格式Flash文件/课件 完美/清晰在IPAD上播放
  7. 医学文献王与word连用
  8. BarCode条形码生成库
  9. Pycharm 专业版配置远程服务器
  10. 数据结构教程—哈夫曼树的构造算法