快速简单的 WatiN 方案:如何处理确认对话框






4.69/5 (4投票s)
如何在 WatiN 中处理确认对话框。
引言
这是一个简短的实用指南或教程,演示如何使用 WatiN 自动化包含确认对话框的网页。
我们将首先创建一个简单的 HTML 页面,并编写两个测试来测试该对话框。
背景
WatiN 是一个 .NET 网页自动化测试工具。更多信息可在 http://watin.sourceforge.net/ 找到。
我们将使用 Visual Studio 2008 Team System 中的 Microsoft Team Test,但任何单元测试框架都可以。
创建页面
为了测试确认对话框,我们需要一个网页。我们的示例页面非常简单且易于测试。
<html>
<body>
<input id="myButton1" type="button" value="this is a button"
onclick="confirmMe(); return false;"><br>
<script>
function confirmMe() {
var answer = confirm ("Are you having fun?")
if (answer)
document.getElementById("myButton1").value="Clicked OK";
else
document.getElementById("myButton1").value="Clicked Cancel";
}
</script>
</body>
</html>
如您所见,我们有一个调用函数的按钮。该函数会弹出一个确认对话框,根据用户点击“确定”还是“取消”来设置按钮的标题。
现在,我们需要测试页面!
编写测试
我们将创建两个测试方法,一个用于测试“确定”按钮,另一个用于测试“取消”按钮。首先,创建您的单元测试项目,并设置对 WatiN 二进制文件 *WatiN.Core.dll* 的引用。同样,我们使用的是 Microsoft 单元测试框架,因此我们将创建一个新的测试项目并添加一个单元测试。
using WatiN.Core;
using WatiN.Core.DialogHandlers;
[TestMethod()]
public void ConfirmOKTest()
{
using (IE ie = new IE("https:///confirmtest.htm"))
{
ConfirmDialogHandler handler = new ConfirmDialogHandler();
using (new UseDialogOnce(ie.DialogWatcher, handler))
{
ie.Button("myButton1").ClickNoWait();
handler.WaitUntilExists();
handler.OKButton.Click();
}
ie.WaitForComplete();
Assert.AreEqual("Clicked OK", ie.Button("myButton1").Text);
}
}
如果您想查看 VB 中的测试
<TestMethod()>Public Sub ConfirmOKTest()
Dim ie As New IE("https:///ConfirmTest.htm")
Dim handler As New ConfirmDialogHandler()
Using udo As New UseDialogOnce(ie.DialogWatcher, handler)
ie.Button("myButton1").ClickNoWait()
handler.WaitUntilExists()
handler.OKButton.Click()
End Using
ie.WaitForComplete()
Assert.AreEqual("Clicked OK", ie.Button("myButton1").Text)
End Sub
对于我们的简短教程,测试相当简单。我们确保使用了两个所需的 WatiN 类:Core
用于基本功能和 IE 自动化,以及 DialogHandler
用于实际控制对话框。
IE
对象是可释放的,我们需要确保在使用完毕后将其释放。我们将创建一个名为 ie
的新 IE
实例,并将起始 URL 设置为我们上面创建的页面。
接下来,我们需要添加一个处理程序。这是实际管理我们将弹出的对话框中按钮点击的对象。同样,此对象是可释放的,并且仅在我们实际使用它时才需要保留在范围内。具体来说,我们将使用 ConfirmDialogHandler
并告诉 WatiN 我们只使用一次它,使用浏览器内置的 DialogWatcher
和我们刚刚创建的 ConfirmDialogHandler
实例化一个新的 UseDialogOnce
。
我们的按钮的 ID 为 myButton1
,因此我们将引用它并单击该按钮,无需等待浏览器响应我们的点击。我们的对话框处理程序将为我们处理。
ie.Button("myButton1").ClickNoWait();
现在,我们只需等待确认对话框出现,然后告诉处理程序我们想要单击哪个按钮。对于此测试,我们将单击“确定”。
handler.WaitUntilExists();
handler.OKButton.Click();
现在对话框已处理完毕,因此我们等待 IE 完成处理我们的点击。我们可以检查我们的操作是否成功,这将导致按钮的标题从“this is a button”更改为“Clicked OK”。
ie.WaitForComplete();
Assert.AreEqual("Clicked OK", ie.Button("myButton1").Text);
当然,我们也需要检查“取消”按钮的行为。我们的测试几乎相同,但我们将检查“取消”操作,而不是“确定”按钮和我们的“确定”按钮标题更改。
[TestMethod()]
public void ConfirmCancelTest()
{
using (IE ie = new IE("https:///confirmtest.htm"))
{
ConfirmDialogHandler handler = new ConfirmDialogHandler();
using (new UseDialogOnce(ie.DialogWatcher, handler))
{
ie.Button("myButton1").ClickNoWait();
handler.WaitUntilExists();
handler.CancelButton.Click();
}
ie.WaitForComplete();
Assert.AreEqual("Clicked Cancel", ie.Button("myButton1").Text);
}
}
此测试单击“取消”并检查按钮标题是否已更改为“Clicked Cancel”。
易如反掌!
关注点
这是一个非常简单的解决方案,可以处理令人惊讶的复杂场景。WatiN 使我的团队能够非常轻松地自动化我们 Web 应用程序的测试。
历史
- 2009 年 8 月 26 日:添加了确认“确定”测试的 VB 版本。
- 2009 年 8 月 25 日:首次编写。