Watin - 使用ConfirmDialogHandler处理确认对话框

Mat*_*rts 15 c# asp.net watin

使用Watin,我正在尝试处理确认对话框并告诉watin按"OK".这在互联网上有很好的记录 - 你使用ConfirmDialogHandlerUseDialogOnce方法..除了它不适合我.我收到以下错误:

WatiN.Core.Exceptions.WatiNException: Dialog not available within 5 seconds

我正在使用watin 2.0 beta atm,但我之前使用的是早期版本的1.X,它有同样的问题.在运行64位Vista的同事机器上测试,我正在运行64位Windows 7.

代码如下所示:

        using (IE ie = new IE("http://localhost/TestApp/TestConfirmPage.asp"))
        {
            var approveConfirmDialog = new ConfirmDialogHandler();

            using (new UseDialogOnce(ie.DialogWatcher, approveConfirmDialog))
            {
                ie.Button(Find.ByName("btn")).ClickNoWait();
                approveConfirmDialog.WaitUntilExists(5);
                approveConfirmDialog.OKButton.Click();
            }
            ie.WaitForComplete();
        }
Run Code Online (Sandbox Code Playgroud)

ASP页面非常简单,它包含一个强制确认的按钮,如下所示:

<input type="button" name="btn" id="btn" value="Click me" onclick="ConfirmApp()"  />
Run Code Online (Sandbox Code Playgroud)

并且ConfirmApp已被剥离进行测试,以便现在它包含的是:

 bOK = confirm("You clicked a popup. Did you mean to?");
 return bOK;
Run Code Online (Sandbox Code Playgroud)

and*_*eja 11

代码看起来很好,我认为它应该工作.唯一的想法是我做了不同的事情就是使用Dialog块将Wait for Complete置于内部.不知道为什么,但在我这样做之前我也有一些问题,有时它有效但有时却没有.并且我在等到存在时不使用时间限制.但你可能已经尝试过了那个.

例如:

using (new UseDialogOnce(ie.DialogWatcher, approveConfirmDialog))
        {
            ie.Button(Find.ByName("btn")).ClickNoWait();
            approveConfirmDialog.WaitUntilExists();
            approveConfirmDialog.OKButton.Click();
            ie.WaitForComplete();
        }
Run Code Online (Sandbox Code Playgroud)