0

我有一个屏幕,在加载时会弹出一个使用 javascript 的打印对话框。

我刚刚开始使用 WatiN 来测试我的应用程序。此屏幕是测试的最后一步。

发生的情况是有时 WatiN 在对话框出现之前关闭 IE,有时它不会,并且窗口会挂起。我在测试 TearDown 中有 ie.Close() 但如果显示打印对话框,它仍然保持打开状态。

我试图避免的是拥有孤立的 IE 窗口。我希望它一直关闭。

我查找了 DialogHandlers 并写了这个:

var printDialogHandler = new PrintDialogHandler(PrintDialogHandler.ButtonsEnum.Cancel);
ie.DialogWatcher.Add(printDialogHandler);

并将其放置在单击链接到页面的按钮之前,但没有任何改变。

我看到的示例中的代码可以执行以下操作:

someDialogHandler.WaitUntilExists() // I might have this function name wrong...

但是 PrintDialogHandler 没有太多成员。

我最初并没有尝试测试这个对话框是否出现(只是页面加载并检查页面上的一些值),但我想等待和测试打印对话框的存在会更完整。

4

3 回答 3

2

不完全确定您的情况,但我们遇到了一个弹出窗口的问题,该窗口在加载时也会显示一个打印对话框。我们的主要问题是我们忘记创建一个新的 IE 实例并将其附加到弹出窗口。这是工作代码:

btnCoverSheetPrint.Click(); //Clicking this button will open a new window and a print dialog
IE iePopup = IE.AttachToIE(Find.ByUrl(new Regex(".+_CoverPage.aspx"))); //Match url ending in "_CoverPage.aspx"

WatiN.Core.DialogHandlers.PrintDialogHandler pdhPopup = new WatiN.Core.DialogHandlers.PrintDialogHandler(WatiN.Core.DialogHandlers.PrintDialogHandler.ButtonsEnum.Cancel);
using (new WatiN.Core.DialogHandlers.UseDialogOnce(iePopup.DialogWatcher, pdhPopup)) //This will use the DialogHandler once and then remove it from the DialogWatcher
{
    //At this point the popup window will be open, and the print dialog will be canceled
    //Use the iePopup object to manage the new window in here.
}

iePopup.Close(); // Close the popup once we are done.
于 2009-07-22T01:18:50.270 回答
1

这对我有用:

private void Print_N_Email(Browser ie)
{
   //Print and handle dialog.
   ie.Div(Find.ById("ContentMenuLeft")).Link(Find.ByText(new Regex("Print.*"))).Click();//orig
   Browser ie2 = Browser.AttachTo(typeof(IE), Find.ByUrl(new Regex(".*Print.*")));
   System.Threading.Thread.Sleep(1000);

   PrintDialogHandler pdh = new PrintDialogHandler(PrintDialogHandler.ButtonsEnum.Cancel);
   new UseDialogOnce(ie2.DialogWatcher, pdh);
   ie2.Close(); 
}
于 2010-10-12T17:06:16.673 回答
0

您仍然可能需要检查您的浏览器AutoClose属性ie.AutoClose

于 2010-08-06T15:34:25.273 回答