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

时间:2009-05-19 13:13:52

标签: c# asp.net watin

使用Watin,我正在尝试处理确认对话框并告诉watin按“确定”。这在互联网上有很好的记录 - 您使用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();
        }

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

<input type="button" name="btn" id="btn" value="Click me" onclick="ConfirmApp()"  />

ConfirmApp已被剥离进行测试,现在它包含的全部内容是:

 bOK = confirm("You clicked a popup. Did you mean to?");
 return bOK;

4 个答案:

答案 0 :(得分:11)

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

例如:

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

答案 1 :(得分:2)

我有同样的问题并尝试了很多东西,但只是忽略了我正在调用的一个部分。单击()然后将其更改为.ClickNoWait()并对事物进行排序。希望这有帮助

答案 2 :(得分:1)

我遇到了同样的问题,无论我做什么,它都没有工作,直到找到一个需要时间但对我有用的解决方法。

WaitUntilExists() 的默认时间为30秒,因此在IE9中使用时,请提供以下延长时间限制。

handler.WaitUntilExists(40); // or whatever time suits you above 30

这肯定需要时间但是有效。

答案 3 :(得分:0)

在对话监视器解决方案上花了几个小时的变化。在IE9中没有什么对我有用。

我最终得到了一个适合我的单线,希望它可以帮助别人!这种方法完全避免了尝试使用用户按键来处理对话框。

  • 好的。按下ClickNoWait按钮,然后执行以下所有步骤:

SendKeys.SendWait( “{} ENTER”);

  • 取消。执行导致元素ClickNoWait的所有步骤,然后: SendKeys.SendWait( “{TAB}”); SendKeys.SendWait( “{} ENTER”);

nb:使用System.Windows.Forms