WatiN: печать диалогов - PullRequest
0 голосов
/ 14 июля 2009

У меня есть экран, который появляется при загрузке с диалоговым окном печати с использованием JavaScript.

Я только начал использовать WatiN для тестирования своего приложения. Этот экран - последний шаг теста.

Что происходит, иногда WatiN закрывает IE до появления диалогового окна, иногда этого не происходит, и окно зависает. У меня есть ie.Close () в тесте TearDown, но он все равно остается открытым, если отображается диалоговое окно печати. ​​

Чего я пытаюсь избежать, так это того, что у меня есть окно-сирота. Я хочу, чтобы он все время закрывался.

Я посмотрел DialogHandlers и написал это:

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

И поместил его перед нажатием кнопки, которая ссылается на страницу, но ничего не изменилось.

В примерах, которые я видел, был код, который бы делал что-то вроде:

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

Но у PrintDialogHandler мало членов.

Изначально я не пытался проверить, появляется ли это диалоговое окно (только что страница загружается и проверяет некоторые значения на странице), но я думаю, что было бы более полно подождать и проверить существование диалогового окна печати.

Ответы [ 3 ]

2 голосов
/ 22 июля 2009

Не совсем уверен в вашей ситуации, но у нас была проблема с всплывающим окном, которое также отображало диалоговое окно печати при загрузке. Нашей главной проблемой было то, что мы забыли создать новый экземпляр 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.
1 голос
/ 12 октября 2010

Это сработало для меня:

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(); 
}
0 голосов
/ 06 августа 2010

Вы все еще можете проверить свой браузер AutoClose свойство ie.AutoClose

...