我试图在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中下载。还有一个链接“如果没有出现下载窗口,请点击下载文件”。可以直接单击它以使文件出现在通知栏中以下载文件。
答案 0 :(得分:1)
关键是找到正确的元素以及如何调用它。
如果此行不起作用:
ie.Link("startDownloadLinkId").ClickNoWait();
您的控件可能属于不同类型:
ie.Button(Find.ById("startDownloadLinkId")).ClickNoWait();
或者您可以尝试直接下载:
ie.GoTo(fullFileName);
关键是你必须抓住你需要的控制类型。您可以查询ie.Elements
直到找到它为止。如果已知id,name或type,请使用Find.By*
方法之一。