Расставим точки на И! Chrome/Firefox/Edge профили а так же их preferences/options/arguments

chromedriver
geckodriver
edge
configuration
selenium
firefox
chrome
webdriver
Теги: #<Tag:0x00007fedb95533a0> #<Tag:0x00007fedb95531c0> #<Tag:0x00007fedb9553008> #<Tag:0x00007fedb9552ea0> #<Tag:0x00007fedb9552d38> #<Tag:0x00007fedb9552bd0> #<Tag:0x00007fedb9552a18> #<Tag:0x00007fedb95528d8>

(Dmytro Kryshtopenko) #1

Проблема: настройка (конфигурация) инстансов веб-драйвера (Chrome/Firefox/Edge) а так же их кастомных профилей.
Цель: давайте в сей топик мы поделимся знаниями о ручной конфигурации инстансов селениума.

Немного от себя (крик души):

Я открывал официальную документацию и читал форумы:

  1. Chrome: https://sites.google.com/a/chromium.org/chromedriver/capabilities?pli=1
  2. Gecko(Firefox): https://github.com/mozilla/geckodriver/issues/1260
  3. Edge(но это бред, у него нету профилей): https://www.thewindowsclub.com/change-edge-browser-settings-windows-10
    Но это все НЕ РАБОТАЕТ.

Возьмём тот же Selenium 3.12.0 последней версии ровно как и web драйверы.
У меня получилось делать две вещи:

  1. Добавлять некоторые(вру, один) аргумент(ы) к Хрому (и это фулл скрин, но зачем если есть driver.manage.window.makeMaximize), остальные аргументы, в виде (user-data-dir для указания кастомного профиля или изменения той же не мало важной дириктории для сохранения файлов с сервера по умолчанию - не работает. И всё.). Больше я не властен на Хромом.
  2. Создавать кастомный профиль по ‘firefox.exe -p’ и баловаться с ‘handles.json’ для убирания того же модального окошка противного, при загрузке любого файла. Да, у меня заблокирован чекбокс в настройках ‘никогда не спрашивать при загрузке’ и ты ничего не сделаешь либо я плохо смотрел. Но нужен кастомный профиль для определенного проекта, поэтому главный defaul лучше не трогать. Больше я не властен на Фаерфоксом.

Честно, пердак горит. Я каждый день ищу страницы по тегам “chrome/firefox/edge(лол) arguments/capabilities/preferences, custom profiles” - но это всё Н.Е. Р.А.Б.О.Т.А.Е.Т.

Охладите мой пыл, ну дайте советы.

p.s. я всегда держу свежак в плане версий моих браузеров.
p.s.s. так же накидайте плиз существующих статей на сем портале на эту тематику. Может кому-то повезло…


(Alexandr D ) #2

В C# все работает:

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;
             }

(Алексей Чикпик) #3

Привет, не было пока проблем с кастомными настройками для браузера, на одном проекте мы работали с 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;
    }

(Dmytro Kryshtopenko) #4

Версию Chrome/Gecko/Edge драйвера скажите, пожалуйста.


(Dmytro Kryshtopenko) #5

Версию драйверов скажите, пожалуйста.


(Алексей Чикпик) #6

Сейчас я вам не скажу т.к. не на проекте больше, но одни из последних там стоят.


(Alexandr D ) #7

Версии NuGet могу подсказать, последнее что есть: