Как загрузить и сохранить файл excel и pdf из всплывающего окна в нужном месте с помощью Selenium, написанного на C #

Я хотел бы знать, есть ли способ для автоматических тестов загрузить файл (в моем случае excel и pdf) и сохранить его в нужном месте с помощью веб-драйвера selenium. Я пытался использовать профиль Firefox, но это не сработало. При запуске теста появляется всплывающее окно с вопросом, открыть или сохранить файл. Итак, когда мы нажимаем кнопку, я не хочу, чтобы всплывающие окна отображались, вместо этого автоматически разрешаю загрузку в нужное место (как локально, так и на Selenium Server). Мы используем C # для написания тестов. В приложении всплывающие окна. Может ли кто-нибудь помочь с этим?

введите здесь описание изображения

public static IWebDriver Build(SeleniumInstanceContext context)
    {
        IWebDriver instance;            
        var capabilities = new DesiredCapabilities();
        var profile = CreateFirefoxProfile();

        //Pass the Firefox profile to be used by RemoteWebDriver
        capabilities.SetCapability(FirefoxDriver.ProfileCapabilityName, profile.ToBase64String());

        switch (context.TestingBrowser.ToUpperInvariant())
        {
            case "CHROME":
                instance = context.SeleniumEnvironment.ToUpper() == "REMOTEWEBDRIVER"
                    ? new RemoteWebDriver(new Uri(context.SeleniumServerUrl), DesiredCapabilities.Chrome())
                    : new ChromeDriver();
                break;
            case "IE":
                instance = context.SeleniumEnvironment.ToUpper() == "REMOTEWEBDRIVER"
                    ? new RemoteWebDriver(new Uri(context.SeleniumServerUrl),
                        DesiredCapabilities.InternetExplorer())
                    : new InternetExplorerDriver();
                break;
            default:
                instance = context.SeleniumEnvironment.ToUpper() == "REMOTEWEBDRIVER"
                    ? new RemoteWebDriver(new Uri(context.SeleniumServerUrl), capabilities,
                        TimeSpan.FromMinutes(5))
                    : new FirefoxDriver(profile);
                break;
        }

        return instance;
    }

[![enter image description here][1]][1]public static FirefoxProfile CreateFirefoxProfile()
    {
        //Create FireFox Profile object
        var profile = new FirefoxProfile();

        //Set Location to store files after downloading.
        const string path = "C:\\Users\\abc.xyz\\Downloads";
        profile.SetPreference("browser.download.dir", path);
        profile.SetPreference("browser.download.folderList", 2);

        //Set Preference to not show file download confirmation dialogue using MIME types Of different file extension types.
        profile.SetPreference("browser.helperApps.neverAsk.saveToDisk", "text/csv,application/x-msexcel,application/excel,application/x-excel,application/excel,application/x-excel,application/excel,application/vnd.ms-excel,application/x-excel,application/x-msexcel,application/csv");
        //profile.SetPreference("browser.helperApps.neverAsk.openFile", "application/octet-stream");

        //profile.SetPreference("browser.download.manager.showWhenStarting", false);
        profile.SetPreference("pdfjs.disabled", true);

        profile.SetPreference("browser.download.alertOnEXEOpen", false);
        profile.SetPreference("browser.download.manager.focusWhenStarting", false);
        profile.SetPreference("browser.helperApps.alwaysAsk.force", true);
        profile.SetPreference("browser.download.manager.alertOnEXEOpen", false);
        profile.SetPreference("browser.download.manager.closeWhenDone", false);
        profile.SetPreference("browser.download.manager.showAlertOnComplete", false);
        profile.SetPreference("browser.download.manager.useWindow", false);

        return profile;
    }

person ranp    schedule 11.07.2017    source источник
comment
Пробовали ли вы установить флажок Делать это автоматически... и сохранить его как профиль Firefox? Также убедитесь, что вы не изменяете временный профиль, созданный во время тестового сеанса Selenium!   -  person Kirhgoph    schedule 11.07.2017
comment
Как мне справиться с этим автоматически ... так как это автоматический тест, и это всплывающее окно, а не браузер?   -  person ranp    schedule 11.07.2017


Ответы (2)


  1. Загрузите профиль Firefox, который вы используете для тестирования, попробуйте загрузить любой файл .xls — вы увидите это всплывающее окно.
  2. Поставьте галочку и загрузите файл так, как вы хотите, чтобы он загружался в ваши автотесты.

В следующий раз, когда вы откроете Firefox с этим профилем в автотестах, эти файлы xls будут загружены без какого-либо всплывающего окна.

person Kirhgoph    schedule 11.07.2017

Похоже, вы забыли включить некоторые типы MIME в предпочтение browser.helperApps.neverAsk.saveToDisk.

Вот типы MIME для расширений файлов .xls, .xlsx и .pdf:

  • .xls - application/excel
  • .xls - application/vnd.ms-excel
  • .xls - application/x-excel
  • .xls - application/x-msexcel
  • .xlsx - application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
  • .pdf - application/pdf

Использованная литература:


Чтобы скрыть это всплывающее окно для файлов с расширениями .xls, .xlsx и .pdf, добавьте типы MIME, разделенные запятой:

string[] mimeTypes = new string[]
{
    // .xls
    "application/excel",
    "application/vnd.ms-excel",
    "application/x-excel",
    "application/x-msexcel",

    // .xlsx
    "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",

    // .pdf
    "application/pdf"
};

FirefoxProfile profile = new FirefoxProfile();
profile.SetPreference("browser.helperApps.neverAsk.saveToDisk",
    string.Join(",", mimeTypes));
person budi    schedule 11.07.2017
comment
Спасибо. Добавление этого типа mime работало в моем файле local. Однако, если я запускаю тот же тест в удаленном веб-драйвере, используя хаб-узел selnium, он не загружает файл. Я создал структуру папок на своем удаленном компьютере, чтобы загрузить файл. Итак, есть идеи заставить его работать на удаленке? - person ranp; 21.07.2017
comment
Хм... к сожалению, я не уверен. Я полагаю, что это будет работать так же, вы подтвердили, что структура папок точно соответствует вашей локальной машине? - person budi; 21.07.2017
comment
да, я проверил это в выводе консоли, который возвращает ту же структуру папок. - person ranp; 21.07.2017
comment
Тогда не уверен, я мало работал с удаленным веб-драйвером, извините за это. - person budi; 21.07.2017