Я пытаюсь загрузить и проанализировать содержимое файла PDF из протестированного Angular приложения. Я попробовал два метода: 1) Первый метод позволяет Selenium загружать файл PDF в указанное место благодаря нескольким Chrome вариантам драйвера:
ChromeOptions options = new ChromeOptions();
options.AddUserProfilePreference("download.default_directory", path);
options.AddUserProfilePreference("download.prompt_for_download", false);
options.AddUserProfilePreference("download.directory_upgrade", "true");
options.AddUserProfilePreference("disable-popup-blocking", "true");
options.AddUserProfilePreference("safebrowsing.enabled", "true");
options.AddUserProfilePreference("plugins.always_open_pdf_externally", true);
options.AddArguments("--no-sandbox");
options.AddArguments("--disable-gpu");
Затем я использую местоположение из download.default_dictionary, чтобы получить и проанализировать файл использование сторонней библиотеки:
string folderPath = Path.Combine(downloadFolder, _context.GetTestRunId().ToString(), _context.GetTestName());
string file = Path.Combine(folderPath, fileName); [...]
Ldoc = new PdfLoadedDocument(file);
2) Второй способ - разрешить драйверу Chrome открывать файл PDF на другой вкладке в браузере:
options.AddUserProfilePreference("plugins.always_open_pdf_externally", false);
и переключаться на эту новую вкладку :
var currentscreen = GetDriver().CurrentWindowHandle;
var tabSet = GetDriver().WindowHandles;
foreach (string tab in tabSet)
{
if (!tab.Equals(currentscreen))
{
GetDriver().SwitchTo().Window(tab);
}
}
, затем получить файл из URL-адреса и сохранить его в заданном месте, а затем проанализировать его:
string folderPath = Path.Combine(downloadFolder, _context.GetTestRunId().ToString(), _context.GetTestName());
string file = Path.Combine(folderPath, fileName);
var url = _context.GetDriver().Url;
byte[] imageData = null;
using (var wc = new System.Net.WebClient())
imageData = wc.DownloadData(url);
var ms = new MemoryStream(imageData);
FileStream fileStream = new FileStream(file, FileMode.Create, FileAccess.Write);
ms.WriteTo(fileStream);
fileStream.Close();
ms.Close();
[...]
string folderPath = Path.Combine(downloadFolder, _context.GetTestRunId().ToString(), _context.GetTestName());
string file = Path.Combine(folderPath, fileName); [...]
Ldoc = new PdfLoadedDocument(file);
В обоих случаях, когда я выполняю этот тест с моего локального компьютера, из Visual Студия и URL приложения находятся на тестовом сервере - загруженный файл PDF состоит из текста и одного изображения. Но когда TFS запускает тот же тест - PDF-файл, загруженный в папку на сервере, пропускает это изображение . Я также пробовал этот подход: Отсутствуют элементы при использовании селена chrome драйвер для автоматического ' Сохранить как PDF ' (я имею в виду chrome_options.add_argument (' - enable-print-browser ')), но в моем случае это не работает. Кто-нибудь, кто наблюдал подобное поведение драйвера chrome и нашел какое-либо решение этой проблемы?