Проблема: настройка (конфигурация) инстансов веб-драйвера (Chrome/Firefox/Edge) а так же их кастомных профилей.
Цель: давайте в сей топик мы поделимся знаниями о ручной конфигурации инстансов селениума.
Немного от себя (крик души):
Я открывал официальную документацию и читал форумы:
Возьмём тот же Selenium 3.12.0 последней версии ровно как и web драйверы.
У меня получилось делать две вещи:
Добавлять некоторые(вру, один) аргумент(ы) к Хрому (и это фулл скрин, но зачем если есть driver.manage.window.makeMaximize), остальные аргументы, в виде (user-data-dir для указания кастомного профиля или изменения той же не мало важной дириктории для сохранения файлов с сервера по умолчанию - не работает. И всё.). Больше я не властен на Хромом.
Создавать кастомный профиль по ‘firefox.exe -p’ и баловаться с ‘handles.json’ для убирания того же модального окошка противного, при загрузке любого файла. Да, у меня заблокирован чекбокс в настройках ‘никогда не спрашивать при загрузке’ и ты ничего не сделаешь либо я плохо смотрел. Но нужен кастомный профиль для определенного проекта, поэтому главный defaul лучше не трогать. Больше я не властен на Фаерфоксом.
Честно, пердак горит. Я каждый день ищу страницы по тегам “chrome/firefox/edge(лол) arguments/capabilities/preferences, custom profiles” - но это всё Н.Е. Р.А.Б.О.Т.А.Е.Т.
Охладите мой пыл, ну дайте советы.
p.s. я всегда держу свежак в плане версий моих браузеров.
p.s.s. так же накидайте плиз существующих статей на сем портале на эту тематику. Может кому-то повезло…
switch (browser.ToLower())
{
case "chrome":
var chromeOptions = new ChromeOptions();
//chromeOptions.AddArgument("--headless");
chromeOptions.AddArgument("--mute-audio");
chromeOptions.AddUserProfilePreference("download.default_directory", DownloadFolder.FullName);
chromeOptions.AddUserProfilePreference("disable-popup-blocking", "true");
DriverThreadLocal.Value = new ChromeDriver(chromeOptions);
break;
case "firefox":
var fireFoxOptions = new FirefoxOptions();
fireFoxOptions.SetPreference("browser.download.folderList", 2);
fireFoxOptions.SetPreference("browser.helperApps.neverAsk.saveToDisk",
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
fireFoxOptions.SetPreference("browser.download.dir", DownloadFolder.FullName);
DriverThreadLocal.Value = new FirefoxDriver(fireFoxOptions);
break;
}
Привет, не было пока проблем с кастомными настройками для браузера, на одном проекте мы работали с Selenide и там мы просто имплементировали один интерфейс и сетали нужные настройки, проблем не было. На пред проекте с использованием чистого Selenium проблема была только с одним окошком что вылазил в самом начале. В Chrome я передавал аргументы листом, и все работало без проблем. Вот код с пред проекта :
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability(UNEXPECTED_ALERT_BEHAVIOUR, DISMISS);
switch (capability) {
case FIREFOX: {
System.setProperty(GECKO_DRIVER_EXE_PROPERTY, pathToDrivers + GECKO_EXE);
//using this parameter to turn off Firefox logging
System.setProperty(BROWSER_LOGFILE, "/dev/null");
FirefoxProfile profile = new FirefoxProfile();
profile.setPreference(UNEXPECTED_ALERT_BEHAVIOUR, DISMISS.toString());
profile.setPreference("network.automatic-ntlm-auth.trusted-uris", "yourHost.com");
FirefoxOptions options = new FirefoxOptions();
options.addPreference("security.sandbox.content.level", 5);
options.setProfile(profile);
options.setAcceptInsecureCerts(true);
driver = new FirefoxDriver(options);
break;
}
case CHROME: {
System.setProperty(CHROME_DRIVER_EXE_PROPERTY, pathToDrivers + CHROMEDRIVER_EXE);
ChromeOptions options = new ChromeOptions();
options.setAcceptInsecureCerts(true);
options.setUnhandledPromptBehaviour(DISMISS);
DesiredCapabilities desiredCapabilities = DesiredCapabilities.chrome();
desiredCapabilities.setCapability("chrome.switches", singletonList("-- ignore-certificate-errors,--web-security=false,--ssl-protocol=any,--ignore-ssl-errors=true"));
desiredCapabilities.setCapability(CAPABILITY, options);
driver = new ChromeDriver(options);
break;
}
default: {
driver = new FirefoxDriver();
break;
}
}
driver.manage().deleteAllCookies();
return driver;
}