【问题标题】:How to handle multiple file downloads in Playwright?如何在 Playwright 中处理多个文件下载?
【发布时间】:2022-10-02 06:16:36
【问题描述】:
我有一个按钮,单击该按钮将开始下载多个文件(此按钮还将打开 chrome://downloads 选项卡并立即将其关闭。
用于下载的 page.download 事件处理程序不会触发。
page.WaitForDownloadAsync() 仅返回这些文件之一。
我不知道要下载的文件名,也不知道是否会下载超过1个文件,总是有可能只下载1个文件,也有可能会下载多个文件。
我如何在剧作家中处理这个问题?我想返回所有下载文件路径的列表。
标签:
c#
.net
playwright
playwright-sharp
playwright-dotnet
【解决方案1】:
所以我用以下逻辑解决了这个问题。
我创建了两个变量:
- 列出下载的文件 = new List();
- 列出文件下载会话 = new();
然后,我创建了一个方法以将其作为处理程序添加到 page.Download,如下所示:
private async void downloadHandler(object sender, IDownload download)
{
fileDownloadSession.Add("Downloading...");
var waiter = await download.PathAsync();
downloadedFiles.Add(waiter);
fileDownloadSession.Remove(fileDownloadSession.First());
}
之后,我创建了一个公共方法来获取下载的文件,如下所示:
public List<string> GetDownloadedFiles()
{
while (fileDownloadSession.Any())
{
}
var downloadedFilesList = downloadedFiles;
downloadedFiles = new List<string>();
return downloadedFilesList;
}
所有这些方法和计划都在它们自己的一个单独的类中,以便它们可以正确监视下载的文件,并冻结主线程以便它可以获取所有需要的文件。
总而言之,它似乎只是一个粗略的解决方案,类似于在 Selenium 中实现它的方式,在新框架中的垃圾场实现方面没有太大变化。