Я хочу протестировать веб-приложения, размещенные в нашей компании, которые используют сертификаты tls из нашего внутреннего центра сертификации. Обычно я бы добавил CA в хранилище сертификатов браузеров, но, похоже, это невозможно напрямую в Selenium без использования существующего профиля. Этого следует избегать, чтобы в каждом тесте была чистая среда.
Поэтому я попытался найти обходные пути, принимающие ненадежные сертификаты. Есть несколько способов сделать это в драйвере Firefox, например capabilities['acceptInsecureCerts'] = True
. Хотя это работает для страниц, загружаемых на селен с использованием driver.get()
, похоже, что это вызывает проблемы с Ajax запросами.
Примером является HCL Connections 6.5. Панель управления сообщества в Selenium выглядит следующим образом:
You can see that there is an error message and all widgets loaded by ajax (Forums, Bookmarks, ..) are empty. This must be caused by the TLS trust problem: I imported our root CA in the Selenium instance cert store as root CA. After reloading all widgets are present and the error message went away.
How can I fix this, so that ajax requests using a custom CA works in Selenium?
My main code is:
from selenium import webdriver
from selenium.webdriver.firefox.options import Options
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from os.path import expanduser
options = Options()
profile = webdriver.FirefoxProfile()
capabilities = webdriver.DesiredCapabilities().FIREFOX.copy()
capabilities['acceptInsecureCerts'] = capabilities['acceptSslCerts'] = True
geckodriver = f"{expanduser('~')}/Downloads/geckodriver"
driver = webdriver.Firefox(
options=options, executable_path=geckodriver, firefox_profile=profile, firefox_options=options, capabilities=capabilities)
driver.get("https://cnx65-test.internal/communities/service/html/communitystart?communityUuid=0e00eeab-a38f-4404-9ba4-2414be8d8c7f")
Instead of acceptInsecureCerts
and acceptSslCerts
I also tried
profile.accept_untrusted_certs = True
- Настройка только
capabilities['acceptSslCerts'] = True
(без acceptInsecureCerts
): «Невозможно отобразить ошибка виджетов исчезла, но все виджеты по-прежнему пусты profile.accept_untrusted_certs = True
то же самое
К сожалению, все они не исправляют проблему ajax виджетов. Я использую Python 3.7.
Обходной путь: Использование Chromium
Я пробовал Chromium со следующим кодом:
options = webdriver.ChromeOptions()
options.add_argument('ignore-certificate-errors')
chromedriver = "/snap/bin/chromium.chromedriver"
driver = webdriver.Chrome(chromedriver, chrome_options=options)
driver.get("https://cnx65-test.internal/communities/service/html/communitystart?communityUuid=0e00eeab-a38f-4404-9ba4-2414be8d8c7f")
В Chromium он работает с ignore-certificate-errors
аргумент, который является временным решением. Но это не решение, так как я бы предпочел использовать Firefox.