C # WatiN Загрузка файлов IE9 - PullRequest
4 голосов
/ 15 марта 2012

Я пытаюсь загрузить файл с помощью Watin v2.1 с C # 4.0 в IE9, и мне не везет.Есть другие вопросы, задающие подобный вопрос, но ни один из других ответов правильно не загружает файл в моей ситуации, и я устал от них всех.

В версии 2.1 Watin добавлен новый статический метод ReturnDialogHandler.CreateInstance (),должен получить правильный обработчик диалогов для любой версии IE.Я не могу понять, как реализовать этот метод.

Следующий код взят из Вопрос здесь не загружает файл в IE9.

using(IE ie = new IE(someUrlToGoTo))
{
    FileDownloadHandler fileDownloadHandler = new FileDownloadHandler(fullFileName);
    ie.AddDialogHandler(fileDownloadHandler);

    ie.Link("startDownloadLinkId").ClickNoWait();

    fileDownloadHandler.WaitUntilFileDownloadDialogIsHandled(15);
    fileDownloadHandler.WaitUntilDownloadCompleted(200);
}

СледующееКод взят от Вопрос Здесь не загружает файл в IE9.Тем не менее, я не был уверен на 100%, что следует использовать «CANCEL_LINK».Я попытался использовать имя файла, путь к файлу для загрузки и т. Д.

var cancel = browser.Link(Find.ByUrl(CANCEL_LINK));
var confirmDialog = new ConfirmDialogHandler();
using (new UseDialogOnce(browser.DialogWatcher, confirmDialog))
{
    cancel.ClickNoWait();
    confirmDialog.WaitUntilExists();
    confirmDialog.OKButton.Click();
    browser.WaitForComplete();
}

Обновление 1

Я также пытался использовать SendKeys для ручного сохранения файла без использованияWatiN, и это не кажется последовательным.Он работает немного по-разному, а иногда даже не загружает файл.Несколько раз он не переименовывает файл, но загружает его.Вот код:

System.Windows.Forms.SendKeys.SendWait("%N"); // Selects Notification Bar

System.Windows.Forms.SendKeys.SendWait("{TAB}");
System.Windows.Forms.SendKeys.SendWait("{DOWN 2}");  // Save As Option
System.Windows.Forms.SendKeys.SendWait("{ENTER}");
System.Windows.Forms.SendKeys.SendWait("DownloadedFile.txt");  // Enters File Name
System.Windows.Forms.SendKeys.SendWait("{ENTER}");

Обновление 2: 3/19

Я испробовал предложения, перечисленные KMoraz, и не смог заставить их работать,Я попытался перейти к точному пути к файлу, используя ie.GoTo (filePathofFile) или поиск по идентификатору, и он действительно находит файл, но не инициирует загрузку.Кажется, я могу найти файл правильно, но он просто не загружает его.Могу ли я сделать что-то не в порядке?

Обновленная попытка:

string fullFileName = "https://mywebsite.com/files/area/download/ImportantFile.ZIP";

browser.GoTo(fullFileName);
FileDownloadHandler fileDownloadHandler = new FileDownloadHandler(fullFileName);
browser.AddDialogHandler(fileDownloadHandler);
fileDownloadHandler.WaitUntilFileDownloadDialogIsHandled(15);
fileDownloadHandler.WaitUntilDownloadCompleted(200);

Я получаю следующее исключение: WatiN Exception is unhandded ... Не отображалось диалоговое окно через 15 секунд.При использовании GoTo страница не переходит на страницу загрузки, но файл находится в панели уведомлений и готов к загрузке.Есть мысли?

Дополнительная информация о сайте: я должен войти на сайт https, используя имя пользователя и пароль.После входа в систему я попадаю на главную страницу, где есть ссылки «Скачать файл текущего дня».Я нажимаю на текст, чтобы загрузить текущий файл.После нажатия на эту ссылку вы попадете на страницу загрузки.Файл появится в панели уведомлений для загрузки в IE.Существует также ссылка «Если окно загрузки не появляется, нажмите, пожалуйста, для загрузки файла».Можно щелкнуть непосредственно, чтобы файл появился в панели уведомлений для загрузки файла.

1 Ответ

1 голос
/ 17 марта 2012

Ключ находит нужный элемент и как его вызвать.

Если эта строка не работает:

ie.Link("startDownloadLinkId").ClickNoWait();

Возможно, ваш элемент управления другого типа:

ie.Button(Find.ById("startDownloadLinkId")).ClickNoWait();

или вы можете попробовать прямую загрузку:

ie.GoTo(fullFileName);

Дело в том, что вы должны захватить нужный вам тип управления. Вы можете запросить ie.Elements, пока не найдете его. Или используйте один из Find.By* методов, если известен идентификатор, имя или тип.

...