使用Watin,我正在尝试处理确认对话框并告诉watin按“确定”。这在互联网上有很好的记录 - 您使用ConfirmDialogHandler
和UseDialogOnce
方法。除了它不适合我。我收到以下错误:
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;
答案 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中没有什么对我有用。
我最终得到了一个适合我的单线,希望它可以帮助别人!这种方法完全避免了尝试使用用户按键来处理对话框。
SendKeys.SendWait( “{} ENTER”);
nb:使用System.Windows.Forms