Я загружаю PDF-файл, используя Selenium, драйвер Chrome, NUnit и C#, а в сохраненном файле нет изображений - только текст - PullRequest
0 голосов
/ 25 апреля 2020

Я пытаюсь загрузить и проанализировать содержимое файла 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 и нашел какое-либо решение этой проблемы?


Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...