65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.69/5 (4投票s)

2009年8月25日

CPOL

3分钟阅读

viewsIcon

36130

如何在 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 日:首次编写。
© . All rights reserved.