Web UI自动化测试原理

目前市面上有很多Web UI自动化测试框架,比如WatiN, Selinimu,WebDriver,还有VS2010中的Coded UI等等. 这些框架都可以操作Web中的控件,模拟用户输入,点击等操作,实现Web自动化测试。其实这些工具的原理都一样,都是通过调用IE COM接口和HTML DOM 对IE浏览器以及WEB测试对象的操作。
本文介绍脱离这些自动化测试框架。 直接使用.NET提供的shdocvm.dll库来操作IE浏览器,使用mshtml.dll库来操作IE中的 HTML对象。
阅读目录
优点
添加引用
操作IE
使用IE Develop Toolbar 查看HTML DOM
操作IE中的HTML元素
源代码下载

优点
通过直接操作IE COM来实现Web自动化,能让你在几分钟之内快速建立一个轻量型的自动化测试程序。 大大的提高了测试效率。 也有助于你理解WatiN这些自动化测试框架的运行原理.
添加引用
shdocvm.dll和mshtml.dll这两个库的COM组件名字和他们的dll名字不一样。所以比较难找。
shdocvm.dll 的COM 组件名字叫"Microsoft Internet Controls". 添加引用如下Add References->Com Tab-> Microsoft Internet Controls

Paste_Image.png

mshtml.dll的COM组件名字叫"Microsoft.mshtml", 添加引用如下Add References-> .NET Tab->Microsoft.mshtml

Paste_Image.png

添加完引用后,就可以引用命名空间了

此处加入mshtml和SHDocVw的介绍,来至 http://www.cnblogs.com/liulf/archive/2010/04/26/1721400.html
首先我们看使用的非托管的类库。我们在这里将会使用两个非托管类库:mshtml.dll和Interop.SHDocVw.dll。 mshtml是微软IE的核心类库,下面是Wiki百科的解释:
Trident (also known as MSHTML) is the name of the layout engine for the Microsoft Windows version of Internet Explorer. It was first introduced with the release of Internet Explorer version 4 in October 1997, has been steadily upgraded and remains in use today. For version 7 of Internet Explorer, Microsoft made significant changes to the Trident layout engine to improve compliance with web standards and add support for new technologies.
开发人员可以通过mshtml提供的接口,访问到IE布局对象,从而达到对Web的控制和检查。
** 另一个类库Interop.SHDocVw.dll则提供了一个InternetExploer的接口,可以帮助我们操纵IE进程,并且进行一些简单的如前进,后退等操作。**
这 两个类库如果装了VS2005都可以找到。mshtml是IE自带的,在项目中选择添加引用,然后在.net标签下面找到 Microsoft.mshtml就可以找到了。而Interop.SHDocVw要复杂一点,添加引用中,选择浏览标签,然后在下面的路径就可以找 到:C:\Program Files\Microsoft Visual Studio 8\Application\PreEmptive Solutions\Dotfuscator Community Edition


  因此我们可以知道:
        1. mshtml, 也叫Trident,  是微软IE的核心类库,用户可通过mshtml提供的接口访问IE布局对象,来对Web进行控制和检查。
        2. SHDocVm 提供InternetExploer的接口,可操作IE进程,和一些对IE的操作,如前进,后退,刷新,退出等。

操作IE
通过shdocvm.dll中的InternetExplorer对象的属性和方法, 比如Height,Width。我们能够操作IE,以便模拟一些用户的操作,比如调整浏览器的大小,刷新页面等。

复制代码

staticvoidMain(string[] args){ InternetExplorer IE =newInternetExplorer(); IE.Visible =true;objectnil =newobject();stringCnblogUrl ="http://www.cnblogs.com";//打开IE并且打开博客园主页IE.Navigate(CnblogUrl,refnil,refnil,refnil,refnil); Thread.Sleep(3000);//设置IE左上角的位置IE.Top =10; IE.Left =10;//设置IE的高度和宽度IE.Height =800; IE.Width =1000;//导航到百度主页Thread.Sleep(3000);stringBaiduUrl ="http://www.baidu.com"; IE.Navigate(BaiduUrl,refnil,refnil,refnil,refnil);//点击后退按钮Thread.Sleep(3000); IE.GoBack();//刷新IEThread.Sleep(3000); IE.Refresh();//关闭IEThread.Sleep(3000); IE.Quit();}
复制代码

使用IE develop toolbar 查看HTML DOM
下节中我们要操作HTML中的元素, 我们先需要知道这些控件的id, 使用IE Develop Toolbar或者firebug可以方便查看控件的id.
按F12启动IE Develop Toolbar, 或者点击IE工具栏中的Tools->Develop Tools


点击图片可在新窗口打开

从图中可以看到博客园中的搜索textbox的id是"q"

操作IE中的HTML元素
模拟一个在博客园首页进行搜索的场景。 模拟在文本框中输入数据, 然后点击"找找看按钮"。
我们通过mshtml.dll库里的getElementById()方法获得你要操作的HTML元素的引用。 然后你可以操作这个对象,比如输入值和点击它

复制代码

staticvoidMain(string[] args){ InternetExplorer IE =newInternetExplorer(); IE.Visible =true;objectnil =newobject();stringCnblogUrl ="http://www.cnblogs.com";//打开IE并且打开博客园主页IE.Navigate(CnblogUrl,refnil,refnil,refnil,refnil); Thread.Sleep(3000);//获取DOM对象HTMLDocument doc = (HTMLDocument)IE.Document;//博客园主页上的搜索Textbox的id是 "q"HTMLInputElement SearchTextBox = (HTMLInputElement)doc.getElementById("q"); SearchTextBox.value ="小坦克";//博客园主页上的"找找看"按钮的id是"btnBloggerSearch"HTMLInputElement SearchButton = (HTMLInputElement)doc.getElementById("btnBloggerSearch"); SearchButton.click();}
复制代码

运行效果如下:


点击图片可在新窗口打开

在实践的过程中,我遇到一个问题,IE.Document 无法识别。编译提示如下错误: 错误 1 预定义的类型“Microsoft.CSharp.RuntimeBinder.Binder”未定义或未导入 错误 2 找不到编译动态表达式所需的一种或多种类型。是否缺少对 Microsoft.CSharp.dll 和 System.Core.dll 的引用? 错误 3 找不到编译动态表达式所需的一种或多种类型。是否缺少对 Microsoft.CSharp.dll 和 System.Core.dll 的引用?
该问题可由一下方法解决:
用记事本打开专案资料夹里的 *.csproj
找到<ItemGroup>区段 手动加入 <Reference Include="Microsoft.CSharp" />
<Reference Include="System.Core" />
即可。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 225,271评论 6 524
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 96,533评论 3 405
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 172,580评论 0 370
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 61,203评论 1 303
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 70,204评论 6 401
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 53,664评论 1 316
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 42,014评论 3 431
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 40,991评论 0 280
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 47,536评论 1 326
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 39,558评论 3 347
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 41,678评论 1 355
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 37,267评论 5 351
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 42,997评论 3 341
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 33,429评论 0 25
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 34,580评论 1 277
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 50,259评论 3 382
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 46,744评论 2 366

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,470评论 25 707
  • Web测试基础 I. 如何开展Web测试 Web测试的对象 Web的页面元素 Web的业务逻辑 Web的数据行为 ...
    厲铆兄阅读 4,395评论 4 62
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,750评论 18 139
  • 学号:32 ID:小树 1、是什么直接的原因促使你加入呆萌? 刚刚和朋友组建了心理咨询团队,需要写...
    小树_阅读 225评论 0 0
  • 今天出去开标在规划局树下捡的
    Dianne1阅读 164评论 0 2