【问题标题】: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】:

    所以我用以下逻辑解决了这个问题。

    我创建了两个变量:

    1. 列出下载的文件 = new List();
    2. 列出文件下载会话 = 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 中实现它的方式,在新框架中的垃圾场实现方面没有太大变化。

    【讨论】:

      猜你喜欢
      • 2021-09-27
      • 1970-01-01
      • 2021-01-07
      • 2020-07-09
      • 2021-09-25
      • 1970-01-01
      • 2022-10-21
      • 2022-07-12
      • 2014-06-24
      相关资源
      最近更新 更多