【问题标题】:WatiN DialogHandler WaitUntilExists times out in IE9WatiN DialogHandler WaitUntilExists 在 IE9 中超时
【发布时间】: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


【解决方案1】:

这是一种快速而肮脏的做法:

    public void ConfirmOKTest()
{
    using (IE ie = new IE("http://localhost/confirmtest.htm"))
    {
        ConfirmDialogHandler handler = new ConfirmDialogHandler();
        using (new UseDialogOnce(ie.DialogWatcher, handler))
        {
            ie.Button("myButton1").ClickNoWait();
            handler.WaitUntilExists();
            handler.OKButton.Click();
        }
        ie.WaitForComplete();
        Assert.AreEqual("Clicked OK", ie.Button("myButton1").Text);
    }
}

编辑: 我不知道为什么我的代码没有格式化。

编辑:终于明白了。

【讨论】:

  • 除了声明一个新的浏览器实例而不是传递它并将等待完成移动到 using 块之外之外,我在这里和我的代码没有看到任何区别。
  • 我尝试了你所拥有的,但似乎也不起作用。这是 IE9 的问题,而不是我读过的代码。
  • Watin 仅测试可与某些 IE 版本一起使用。查看他们的网站了解更多信息。我正在使用 8,并且 confirmDialogHandler 工作完美。
  • 完全正确。这就是我问这个问题的原因。我正在寻找一种解决方法,以便可以在 IE 9 中的对话框上单击“确定”。顺便说一句,WatiN 在其最新版本中确实支持 IE 9。 watin.org/documentation/release-2-1-0-1196
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-03
  • 1970-01-01
相关资源
最近更新 更多