webdriver.FirefoxProfile(): возможно ли использовать профиль, не создавая его копию?

Как указано в документации, вы можете вызвать webdriver.FirefoxProfile() с необязательным аргументом profile_directory указать каталог определенного профиля, который вы хотите использовать в браузере. Я заметил, что выполнение этой команды заняло много времени, поэтому, когда я посмотрел код, он выглядел так, как будто он копировал указанный профиль. Проблема в том, что копирование профиля занимает очень много времени (примерно>30 минут)., не хватило терпения дождаться его окончания.)

Я использую гибрид пользовательских сценариев и селена, чтобы сделать некоторую автоматизацию для меня, поэтому настраивать новый профиль каждый раз, когда я хочу протестировать мой код, было бы обременительно.

Это единственный способ изменить это поведение, чтобы отредактировать firefox_profile.py сам (если так, что было бы лучшим способом пойти об этом?)?

1 ответ

Решение

Согласно текущей реализации GeckoDriver с Firefox, используя FirefoxProfile() работает следующим образом:

  • В случае инициации сеанса просмотра через новый профиль Firefox:

    from selenium import webdriver
    
    myprofile = webdriver.FirefoxProfile()
    driver = webdriver.Firefox(firefox_profile=myprofile, executable_path=r'C:\Utility\BrowserDrivers\geckodriver.exe')
    driver.get('https://www.google.co.in')
    print("Page Title is : %s" %driver.title)
    driver.quit()
    
  • Новый rust_mozprofile создается на ходу следующим образом:

    1521446301607   mozrunner::runner   INFO    Running command: "C:\\Program Files\\Mozilla Firefox\\firefox.exe" "-marionette" "-profile" "C:\\Users\\ATECHM~1\\AppData\\Local\\Temp\\rust_mozprofile.xFayqKkZrOB8"
    
  • Грубое при успешном закрытии (то есть при успешном вызове driver.quit()) временный rust_mozprofile.xFayqKkZrOB8 удаляется / уничтожается полностью.

  • Снова в случае инициирования сеанса просмотра через существующий профиль Firefox () следующим образом:

    from selenium import webdriver
    
    myprofile = webdriver.FirefoxProfile(r'C:\Users\AtechM_03\AppData\Roaming\Mozilla\Firefox\Profiles\moskcpdq.SeleniumTest')
    driver = webdriver.Firefox(firefox_profile=myprofile, executable_path=r'C:\Utility\BrowserDrivers\geckodriver.exe')
    driver.get('https://www.google.co.in')
    print("Page Title is : %s" %driver.title)
    driver.quit()
    
  • Точно так же новый rust_mozprofile создается на ходу следующим образом:

    1521447102321   mozrunner::runner   INFO    Running command: "C:\\Program Files\\Mozilla Firefox\\firefox.exe" "-marionette" "-profile" "C:\\Users\\ATECHM~1\\AppData\\Local\\Temp\\rust_mozprofile.2oSwrQwQoby9"
    
  • Точно так же и в этом случае при успешном закрытии (т.е. при успешном вызове driver.quit()) временный rust_mozprofile.2oSwrQwQoby9 удаляется / уничтожается полностью.

  • Таким образом, временной интервал, который вы наблюдаете, - это время, необходимое для FirefoxProfile() выкопать новый rust_mozprofile.

Возможно, согласно времени вашего вопроса для копирования профиля (что-то вроде>30 минут) это просто накладные расходы. Но нет, использование профиля Firefox невозможно без создания копии rust_mozprofile.

Решение

  • Обновите Selenium Client до текущих уровней Версия 3.11.0.
  • Обновите GeckoDriver до текущего уровня GeckoDriver v0.20.0.
  • Обновите версию Firefox до уровня Firefox Quantum v59.0.1.
  • Очистите рабочее пространство проекта через IDE и перестройте проект только с необходимыми зависимостями.
  • Используйте инструмент CCleaner, чтобы стереть с себя все обязанности ОС до и после выполнения тестового пакета.
  • Если ваша базовая базовая версия Firefox слишком старая, удалите ее с помощью Revo Uninstaller и установите последнюю версию GA и выпущенную версию Firefox Quantum.
  • Выполните свой @Test,
Другие вопросы по тегам