2012-03-15 3 views
4

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

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

Следующий код от Question Here не загружает файл в 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); 
} 

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

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(); 
} 

Update 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}"); 

Update 2: 3/19

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

Обновлено Покушение:

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 Исключение unhanded ... не показан диалог через 15 секунд. Используя GoTo, страница не загружается на страницу загрузки, но файл находится в панели уведомлений и готов к загрузке. Есть предположения?

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

+1

Попробуйте ответить на эту тему: http://stackoverflow.com/questions/7500339/how-to-test-file-download-with-watin-ie9/8532222#8532222 – t3hn00b

+0

Попробуйте ответ по этой ссылке http: //stackoverflow.com/questions/7500339/how-to-test-file-download-with-watin-ie9/8532222#8532222 – t3hn00b

+0

Я получил вышеуказанную информацию, чтобы загрузить файл, но я бы хотел, чтобы WatiN обрабатывал скачать. Файл загружается, но после завершения работы программа может вызвать проблемы при одновременном запуске нескольких разных задач. Спасибо за ввод. – buzzzzjay

ответ

1

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

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

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

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

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

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

ie.GoTo(fullFileName); 

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

+0

Все еще не удалось заставить эти методы работать. Я могу найти файл и он появляется в панели уведомлений, но не запускает файл загрузки. См. Выше обновленное сообщение. Благодаря! – buzzzzjay

+1

Я не уверен, почему это принятый ответ? Первые два примера будут иметь значение только в том случае, если это исключение ElementNotFoundException. Третий пример не изменяет способ работы FileDownloadHandler WatiN (или не работает в этом случае) с IE9. – rossisdead

Смежные вопросы