Scenario Testing With Watin
We are starting to use WatiN to automate the testing of a web application. So far it is working pretty well. One of the things I found confusing was handling confirmation alerts like this:
Pop-ups like this need to be handled by Watin. The code for handling this looks like this.
//setup a handler with Watin var confirmDialogHandler = new ConfirmDialogHandler(); browser.DialogWatcher.Add(confirmDialogHandler); //click the button that causes a confirmation pop-up browser.Element("buttonId").ClickNoWait(); //Clickon the ok button of the confirmation window. confirmDialogHandler.WaitUntilExists(); confirmDialogHandler.OKButton.Click(); browser.WaitForComplete(); //You may want to test that the message is correct. //cleanup browser.DialogWatcher.RemoveAll(confirmDialogHandler);
There is a lot of setup and teardown for the simply clicking a button. Using some .Net 3.5 goodness I created an extension method to make this a little more terse.
//usage Browser.OkButtonClickedOnConfirmDialog(ClickOnUnMarkMasterButton); //could use a lambda but this utilty method looks cleaner private void ClickOnUnMarkMasterButton() { Browser.Element(Find.ById("unmarkMasterContact")).ClickNoWait(); } //implementation public static void OkButtonClickedOnConfirmDialog(this IE browser, Action actionCausingConfirmationDialog) { var confirmDialogHandler = new ConfirmDialogHandler(); browser.DialogWatcher.Add(confirmDialogHandler); actionCausingConfirmationDialog(); confirmDialogHandler.WaitUntilExists(); confirmDialogHandler.OKButton.Click(); browser.WaitForComplete(); browser.DialogWatcher.RemoveAll(confirmDialogHandler); }
Thinking about this more the difficulty in testing this dialog is a sign that we should be using a JQuery lightbox to accomplish the same functionality.