星期二提示日 - 处理文件下载






3.36/5 (5投票s)
如何处理文件下载
一个常见的误解是,在使用Selenium编写自动化测试时,任何发生在浏览器窗口之外或应用程序范围之外的事情都无法测试,也没有办法处理。有时确实如此,但更常见的是,可以通过简单的逻辑或第三方库来处理它。
自动化测试中经常被忽略的一个例子就是验证文件是否正确下载以及下载到正确的位置。例如,当打开链接时,您的应用程序可能会下载一个可执行文件或PDF文件,并且作为测试的一部分,您希望确保它已成功下载。
而要做到这一点,实际上只需要编写很少的代码。假设我们已经到达下载文件的阶段:
public bool VerifyTermsAndConditionsPdfFileDownloads()
{
string expectedFilePath = @“C:\Downloads\TermsAndConditions.pdf”;
bool fileExists = false;
var options = new ChromeOptions();
options.AddUserProfilePreference(“download.default_directory”, @“C:\Downloads”);
var driver = new ChromeDriver(options);
driver.Navigate().GoToUrl(“https://www.yourapplicationtotest.com/files/TermsAndConditions.pdf”);
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(60));
wait.Until<bool>(x =>
fileExists = File.Exists(expectedFilePath));
return fileExists;
}
这段小代码将测试您的URL是否正确下载文件并下载到正确的位置。就这么简单。
您可以很容易地改进此方法,使其更加健壮,方法是添加一个try catch
块来处理找不到文件或超时的情况。此外,如果您愿意,可以使用FileInfo
库获取其他信息,例如文件大小,以确保您的文件与预期的下载大小匹配。
虽然上面的示例适用于Chrome,但您需要更新代码以使用不同的浏览器选项来支持其他浏览器。
FirefoxProfile profile = new FirefoxProfile();
profile.SetPreference(“browser.download.folderList”, 2);
profile.SetPreference(“browser.download.dir”, @“C:/Downloads”);
profile.SetPreference(“browser.helperApps.neverAsk.saveToDisk”, “application/pdf”);
var driver = new FirefoxDriver(profile);
以上类似于我们为Chrome设置下载目录的方式,但是我们也需要告诉Firefox不要询问保存位置以及是直接打开还是保存。目前,我只将其设置为PDF文件,但您可以添加任何扩展名或文件类型。
对于Internet Explorer和Edge,不幸的是,它们不使用配置文件,因此没有简单的方法可以在Internet Explorer和Edge中执行上述行为。
文章 周二技巧:处理文件下载 最先发表在 Learn Automation。