C#WatiN下载文件IE9

时间:2012-03-15 19:30:49

标签: c# visual-studio-2010 c#-4.0 internet-explorer-9 watin

我试图在IE9中使用带有C#4.0的Watin v2.1下载文件,我没有运气。还有其他问题询问类似的问题,但没有其他答案在我的情况下正确下载文件,我已经厌倦了。

Watin的2.1版本添加了一个新的静态方法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”。我尝试使用文件名,文件路径下载,等等。

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)转到确切的文件路径,或者通过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 Exception未被曝光...... 15秒后未显示对话框。通过使用GoTo,它不会将页面带到下载页面,但该文件位于通知栏中,可以下载。有什么想法吗?

有关该网站的更多信息:我必须使用登录名和密码登录https网站。登录后,我进入主页面,其中有“下载当天的文件”链接。我点击文本下载当前文件。点击此链接后,您将转到下载页面。该文件将弹出通知栏,以便在IE中下载。还有一个链接“如果没有出现下载窗口,请点击下载文件”。可以直接单击它以使文件出现在通知栏中以下载文件。

1 个答案:

答案 0 :(得分:1)

关键是找到正确的元素以及如何调用它。

如果此行不起作用:

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

您的控件可能属于不同类型:

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

或者您可以尝试直接下载:

ie.GoTo(fullFileName);

关键是你必须抓住你需要的控制类型。您可以查询ie.Elements直到找到它为止。如果已知id,name或type,请使用Find.By*方法之一。