使用selenium下载没有直接URL的文件

时间:2016-06-02 07:31:38

标签: c# vb.net selenium selenium-chromedriver webautomation

我在使用vb.net在Chrome中使用Selenium进行网站自动化,我想从一个网站下载文件,这些网站没有下载按钮的直接URL(从JavaScript触发的下载)如何在selenium中执行此操作.net(C#或vb.net)?

如果不可能,我希望在用户点击下载按钮并控制诸如设置下载路径和下载完成事件之类的内容时收到通知。

如果无法下载路径设置,那么至少我想在下载完成后获取下载的路径。 如何达到我的要求?

请帮帮我。

1 个答案:

答案 0 :(得分:3)

根据您使用的浏览器,下载可能是一项繁琐的任务。幸运的是,你正在使用Chrome,这不应该太麻烦。

首先,您需要找到启动文件下载的按钮。

driver.FindElement(<locator here>).click()

现在下载应该已经开始了。但是下载可能需要一段时间才能完成。因此,您必须在下载文件夹中轮询新文件(如果您知道文件名,则轮询特定文件)。您可以在创建驱动程序时指定下载文件夹。

var options = new ChromeOptionsWithPrefs();
        options.prefs = new Dictionary<string, object>
        {
            { "download.default_directory", "path/to/downloads/folder" }
        };
        RemoteWebDriver driver = new ChromeDriver("path/to/driver", options);

现在,您可以通过

找到此文件夹中的最新文件
var directory = new DirectoryInfo("path/to/downloads/folder");
var myFile = directory.GetFiles()
             .OrderByDescending(f => f.LastWriteTime)
             .First();

在循环中,您可以将此文件名与刚刚下载的文件的文件名进行比较。在此循环中添加超时,如果未在预期时间内下载,则可能导致测试失败。

注意:我不熟悉这种语言,因此某些代码可能无法完全正常运行,但它会为您提供这个想法