【发布时间】:2013-01-04 22:39:02
【问题描述】:
我正在尝试在弹出的对话框中单击“确定”。我读过 IE9 不能很好地与 WatiN 的对话框处理程序配合使用。我正在使用 WatiN-2.1.0.1196-net-4.0。
下面是我的方法。基本上它会进入警报页面。在该页面上,您可以单击每行单独删除或选择多个复选框并批量删除。我抓住了一组单独的警报删除按钮中的第一个删除按钮,并检查它是否存在。如果是这样,请单击全选按钮,然后单击删除所有选定的警报按钮。
到目前为止,一切似乎都正常,确认删除的对话框现已启动。然后该方法在 browser.waituntilexists() 上超时。
我尝试过增加等待时间,并尝试将处理程序类型切换为 DialogHandler、ConfirmDialogHandler、AlertDialogHandler 等。它们似乎都没有找到弹出的对话框窗口。
我需要解决这个问题,以便确认此对话框。
private void DeleteAlerts(Browser browser)
{
browser.GoTo(URLs.CompleteUrl + "/alerts.aspx?apid=" + PID);
while (browser.Page<AlertsAspx>().deleteMessage.Exists)
{
var handler = new ConfirmDialogHandler();
browser.Page<AlertsAspx>().SelectAll.Click();
using (new UseDialogOnce(browser.DialogWatcher, handler))
{
//Assert.Fail("Never Sees Dialog");
browser.Page<AlertsAspx>().Delete.ClickNoWait();
handler.WaitUntilExists(50);
handler.OKButton.Click();
browser.WaitForComplete();
}
}
}
【问题讨论】:
-
你连接处理程序了吗?您需要像活动一样启动它。
-
连线是什么意思?我有这行: var handler = new ConfirmDialogHandler();
-
为避免混淆,我的变量“browser”是一个 IE 实例,它已经在我的正确页面上。出于这个原因,我不需要声明一个新的 IE 对象。同样,我有一个页面类,它或多或少地在 之间创建页面类的静态实例。因此,当我说“browser.Page
()”时,就是在该页面上声明了一堆预定义的元素。删除是该页面上的一个按钮。 -
那么你是说你想点击的按钮在页面上而不是一个对话框?
-
不,我不需要声明 ie.Button("myButton1") 因为它已经在页面类上声明了。单击该按钮会弹出一个对话框,WatiN 没有看到该对话框。
标签: c# .net internet-explorer-9 watin