Как скачать электронную таблицу Excel, не открывая всплывающее окно Windows - PullRequest
1 голос
/ 16 октября 2019

Существует электронная таблица для загрузки с использованием Java + Selen в режиме без головы. Дело в том, что я использую для выполнения этого теста сервер Linux (CI / CD). Код работает на 100% правильно, когда я использую свой локальный компьютер (Windows) для выполнения этого кода.

ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.addArguments("--disable-infobars");
chromeOptions.addArguments("--browser.helperApps.neverAsk.saveToDisk",
"application/vnd.ms-excel,
vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/excel");
chromeOptions.addArguments("--test-type");
chromeOptions.addArguments("--disable-extensions");
chromeOptions.addArguments("--disable-gpu");
chromeOptions.addArguments("--no-sandbox");
chromeOptions.addArguments("--no-zygote");
chromeOptions.addArguments("--disable-dev-shm-usage");

Map<String, Object> chromePrefs = new HashMap<>();
chromePrefs.put("profile.default_content_settings.popups", 0);
chromePrefs.put("download.prompt_for_download", "false");
chromePrefs.put("cmd", "Page.setDownloadBehavior");

if (OS.startsWith("windows")) {
    chromePrefs.put("download.default_directory", path+WIN_RESOURCES_PATH);
    System.setProperty("webdriver.chrome.driver", ".\\src\\main\\resources\\driver\\chromedriver.exe");

    if (Parameters.instance().getHeadless().toLowerCase().equals("true")) {
        chromeOptions.addArguments("--headless");
        }
        } else if (OS.startsWith("linux")) {
            chromePrefs.put("download.default_directory", path+LIN_RESOURCES_PATH);
            System.setProperty("webdriver.chrome.driver", Parameters.instance().getChromeDriver());
            if (Parameters.instance().getHeadless().toLowerCase().equals("true")) {
                chromeOptions.addArguments("--headless");
            }
        }

chromeOptions.setExperimentalOption("prefs", chromePrefs);
chromeOptions.addArguments("window-size=1920,1080");
driver = new ChromeDriver(chromeOptions);
driver.get(getUrl());
driver.findElement(locator).click;
driver.switchTo().alert().accept();

Мой код примерно такой. Когда Selenium test нажимает кнопку загрузки, открывается еще одна вкладка в браузере, а также всплывающее окно с вопросом, где «сохранить» файл.

«Я запускаю эти тесты в безголовом хроме»

1 Ответ

0 голосов
/ 17 октября 2019

Для меня следующий код работает для загрузки в формате pdf (Windows). С этим параметром нет промотирования, и он загрузит ваш предопределенный путь.

        System.setProperty("webdriver.chrome.driver", "chromedriver.exe");

        Path download_folder = Paths.get(System.getProperty("user.home") + "/Downloads", new String[0]);

        HashMap<String, Object> prefs = new HashMap();
        prefs.put("download.default_directory", download_folder.toAbsolutePath());
        prefs.put("download.prompt_for_download", Boolean.valueOf(false));
        prefs.put("download.directory_upgrade", Boolean.valueOf(true));
        prefs.put("plugins.plugins_disabled", new String[] { "Chrome PDF Viewer" });

        HashMap<String, Object> options = new HashMap();
        options.put("prefs", prefs);

        DesiredCapabilities capabilities = DesiredCapabilities.chrome();
        capabilities.setCapability("chromeOptions", options);
        driver = new ChromeDriver(capabilities);
...