3.3.2 基于浏览器和DOM对象模型的功能自动化测试工具
另外一种自动化的功能测试工具是基于浏览器和DOM对象模型开发的,例如Selenium、Watir等,这些测试工具直接访问Web浏览器,利用脚本语言操纵浏览器和Web页面中包含的DOM对象,从而达到模拟用户控制浏览导航、页面元素的操纵等效果,并且直接获取DOM对象的属性,从而获得Web页面元素的各种属性,通过这些属性可判断测试步骤的结果是否正确。图3.3所示的是可作为插件嵌入到Mozilla Firefox浏览器中的Selenium IDE的测试界面。
图3.3 Selenium IDE的测试界面
HTML DOM(Document Object Model)是一个HTML文档的编程接口,它定义了HTML的标准对象集合,并且定义了标准的访问和操纵HTML对象的方式。HTML DOM接口让测试人员可以访问和操纵HTML文档的内容。图3.4所示的界面是使用了一个名为“IE DOM Inspector”的工具查看到的Web页面中的DOM对象。
图3.4 IE DOM Inspector的界面
如果熟悉和了解DOM的原理,那么完全可以自己动手编写一个基于浏览器和DOM的Web页面自动化测试工具,例如,下面的C#代码就是一个简单的例子:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Diagnostics; using System.Threading; // 引用Microsoft.mshtml的HTML接口 using mshtml; // 引用IE对象 using SHDocVw; namespace WebAutomatedTest1 { public partial class Form1 : Form { static AutoResetEvent documentComplete = new AutoResetEvent(false); public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { InternetExplorer ie = null; // 启动IE的进程 Process p = Process.Start("iexplore.exe", "about:blank"); // 等待一段时间,让IE启动 Thread.Sleep(3000); if (p == null) { MessageBox.Show("不能启动IE!"); return; } SHDocVw.ShellWindows allBrowsers = new SHDocVw.ShellWindows(); // 附加到IE进程 int i = 0; while (i < allBrowsers.Count && ie == null) { InternetExplorer browser = (InternetExplorer)allBrowsers.Item(i); if (browser.HWND == (int)p.MainWindowHandle) ie = browser; ++i; } if (ie == null) { MessageBox.Show("不能附加到IE!"); return; } ie.DocumentComplete += new DWebBrowserEvents2_DocumentCompleteEventHandler(ie_DocumentComplete); object nil = new object(); ie.Navigate("http://127.0.0.1:9462/WebUT/default.aspx",refnil,ref nil,ref nil,ref nil); documentComplete.WaitOne(); HTMLDocument Doc = (HTMLDocument)ie.Document; HTMLInputElement textBox = (HTMLInputElement)Doc.getElementById("TextBox1"); textBox.value = "123"; HTMLInputElement button = (HTMLInputElement)Doc.getElementById("Button1"); button.click(); // 验证,如果Label1的值等于123,则表示测试通过 HTMLSpanElement label = (HTMLSpanElement)Doc.getElementById("Label1"); if (label.innerText == "123") { MessageBox.Show("测试通过!"); } else { MessageBox.Show("测试不通过!"); } } private static void ie_DocumentComplete(object pDisp, ref object URL) { documentComplete.Set(); } } } |
连载一 连载二 连载三 连载四 连载五 连载六 连载七 连载八 连载九 连载十 连载十一
连载十三 连载十四 连载十五 连载十六 连载十七 连载十八 连载十九 连载二十 连载二十一
连载二十二 连载二十三
本文选自:《51Testing软件测试作品系列》之二的《QTP自动化测试实践》,本站经电子工业出版社和作者的授权,近期将进行部分章节的连载,敬请期待!
版权声明:51Testing软件测试网及相关内容提供者拥有51testing.com内容的全部版权,未经明确的书面许可,任何人或单位不得对本网站内容复制、转载或进行镜像。51testing软件测试网欢迎与业内同行进行有益的合作和交流,如果有任何有关内容方面的合作事宜,请联系我们。