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
,