Пользовательские настройки браузера для загрузки файлов
При использовании Selenium WebDriver в качестве основы веб-автоматизации у меня возникает вопрос - как настроить Google Chrome и Internet Explorer для сохранения загруженных файлов в определенную (не по умолчанию) папку, а также без отображения дополнительных окон "Сохранить файл".
У Webdriver есть браузер FirefoxProfile для Mozilla Firefox, но как насчет других браузеров?
Пример для Firefox:
FirefoxProfile profile = new FirefoxProfile();
profile.SetPreference("browser.helperApps.alwaysAsk.force", false);
profile.SetPreference("browser.download.folderList", 2);
profile.SetPreference("browser.download.dir", "\\Somedir\");
profile.SetPreference("services.sync.prefs.sync.browser.download.manager.showWhenStarting", false);
profile.SetPreference("browser.download.useDownloadDir", true);
profile.SetPreference("browser.helperApps.neverAsk.saveToDisk", "application/zip, application/x-gzip");
2 ответа
С Chrome это можно сделать, это не так просто и просто, как манипулирование профилями в Firefox.
Поскольку привязки WebDriver предоставляют возможность добавлять "настраиваемые" возможности и параметры командной строки, вы можете назначить любой из параметров командной строки, о которых Chrome знает:
http://peter.sh/experiments/chromium-command-line-switches/
Благодаря этому мы можем предоставить Chrome профиль для загрузки, как вы делаете это с Firefox.
Однако привязки WebDriver не отображают параметры, а также профили Firefox. Так что это должно быть сделано вручную.
Во-первых, узнайте, где живут ваши профили:
Перейдите по этому URL в Chrome.
chrome://version/
Он скажет вам, какой профиль он загружает (и какие переключатели команд он использует). Скопируйте путь профиля в проводник и перейдите к нему.
По умолчанию следует использовать Default
каталог профиля. Поднимитесь на уровень в проводнике, так что вы сидите в User Data
папка.
Следующий шаг, создайте новый профиль для использования Selenium. Откройте Chrome, выберите "Настройки"> "Пользователи"> "Добавить нового пользователя". Дайте ему имя.
После создания Chrome откроет новое окно Chrome для этого пользователя. Следующий шаг - заставить Chrome, только для этого пользователя, сохранять загрузки в определенном месте.
Это можно сделать двумя способами. В пользовательском интерфейсе Chrome перейдите в "Настройки" и измените каталог загрузки и убедитесь, что флажок рядом с ним снят, или немного более творчески...
Все настройки Chrome хранятся в файле, хранящемся в каталоге пользователей. Вы должны уже открыть окно проводника, сидя на User Data
папка в папке пользователя Chrome. Надеюсь, вы должны увидеть, что он создал новый профиль (вероятно, называется Profile 1
). Войдите в это.
Теперь ищите файл с именем Preferences (без расширения).
Отредактируйте его с помощью Блокнота (это текстовый документ с JSON).
Ищите раздел загрузки, он будет выглядеть так:
"download": {
"directory_upgrade": true,
"extensions_to_open": ""
},
Добавьте этот ключ, указав путь, по которому вы хотите сохранить файлы:
"default_directory": "PATH",
Убедитесь, что вы удаляете любые косые черты в пути с другой обратной косой чертой, точно так же, как и при использовании отладчика Visual Studio.
Например, C:\Bob\Jim\Downloads
должен быть введен как C:\\Bob\\Jim\\Downloads
,
Сохраните этот файл.
Теперь у вас есть профиль, где загрузки идут в определенное место. Как заставить Chrome использовать этот профиль? Вы говорите ему, какой профиль открыть при запуске. Командная строка будет:
--profile-directory="Profile 1"
(Заменить Profile 1
с тем, что это называется в User Data
папка, если это не называется).
Хорошо, мы можем сказать Chrome загрузить определенный профиль, но как мы можем сказать Selenium сделать это тоже? Легко! Добавьте его как "дополнительный ключ командной строки".
var chromeOptions = new ChromeOptions();
chromeOptions.AddArgument(@"--profile-directory=""Profile 1""");
Selenium позаботится о том, чтобы ключ командной строки был передан Chrome.
(Примечание: если кто-нибудь знает более простое решение, дайте мне знать!).
Что касается IE, я проверил это на IE8 и IE9, и он работает нормально. IE может принять во внимание раздел реестра, в котором указано расположение загрузок по умолчанию. Я не могу комментировать IE7 или ниже, хотя.
Перейдите к, используя regedit к (это в соответствии с настройками пользователя Windows):
HKEY_CURRENT_USER \ Программное обеспечение \Microsoft\Internet Explorer
Добавьте в строковое значение Download Directory
, Это значение будет точным местом, куда вы хотите загружать файлы. Не нужно сбегать с пути, кстати.
Просто убедитесь, что пользователь, вошедший в систему под Windows, установил это значение, и больше не нужно никаких настроек.
Пожалуйста, попробуйте следующий код для Chrome. Даже я ищу подобный вариант для IE.
System.setProperty("webdriver.chrome.driver", "/path/to/chromedriver");
String downloadFilepath = "/path/to/download";
HashMap<String, Object> chromePrefs = new HashMap<String, Object>();
chromePrefs.put("profile.default_content_settings.popups", 0);
chromePrefs.put("download.default_directory", downloadFilepath);
ChromeOptions options = new ChromeOptions();
HashMap<String, Object> chromeOptionsMap = new HashMap<String, Object>();
options.setExperimentalOptions("prefs", chromePrefs);
options.addArguments("--test-type");
DesiredCapabilities cap = DesiredCapabilities.chrome();
cap.setCapability(ChromeOptions.CAPABILITY, chromeOptionsMap);
cap.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
cap.setCapability(ChromeOptions.CAPABILITY, options);
WebDriver driver = new ChromeDriver(cap);