Как сделать Selenium WebDriver динамически отображать сертификаты клиентов без визуального обнаружения всплывающих окон

Я пытаюсь использовать Java и Selenium для тестирования веб-сайта, требующего сертификата клиента. Когда я просматриваю свой сайт, я получаю всплывающее окно, как показано ниже, чтобы выбрать правильный сертификат.

Безопасность Windows: выберите сертификат

Мои требования следующие:

  • Выберите сертификат по имени
  • В разных версиях Windows/IE/Edge

В идеале всплывающее окно никогда не отображается; то есть решение будет включать вызов некоторого API или установку некоторой конфигурации, чтобы вывести соответствующий сертификат для использования.


Мое собственное решение:

  • Я попробовал решение, основанное на визуальном обнаружении правильного сертификата, используя SikuliX (что работает), но мне интересно если есть лучшее решение, которое не зависит от визуального обнаружения всплывающего окна. Что-то, что с меньшей вероятностью потерпит неудачу в нескольких версиях Windows, и это будет будущим доказательством, если Microsoft решит изменить внешний вид этого всплывающего окна.

  • Другая идея, которая у меня была (но я не знаю, как это сделать), - это удалить все установленные сертификаты, кроме одного, чтобы всплывающее окно никогда не отображалось:

    • Резервное копирование всего хранилища
    • Удалите все клиентские сертификаты, которые может использовать IE (кроме тех, которые мне нужны)
    • Введите логин, который больше не требует выбора сертификата
    • Восстановить резервное хранилище

    Кто-нибудь знает, как это сделать (в Java, возможно, вызывая команды CLI)?

  • Можно ли запустить (используя Selenium Java) окно Internet Explorer, которое знает только тот единственный сертификат, который мне нужен?

  • Возможно ли в Internet Explorer установить сертификат по умолчанию для данного домена?

Ответ 1

Я не могу сказать точно, но я не удивлюсь, если это невозможно с селеном.

Этот вопрос не наполняет меня надеждой: Селен не может справиться с всплывающим окном подтверждения сертификата в IE

Чем дальше вы уходите от веб-страницы, так и к собственному браузеру, а затем к управлению ОС, тем становится более бессильным Selenium.

Как единственный ответ на связанный вопрос: вы можете отключить всплывающее окно в браузере, которое может быть или не быть работоспособным решением.

Если вы не хотите идти по этому маршруту, люди чаще всего возвращаются к Java Robot для обработки вещей, которые драйвер селена не может сделать, например. взаимодействовать с диалоговыми окнами печати и другими такими элементами управления.

Смотрите mouseMove, mousePress, mouseRelease Вы бы назвали каждый из них, предоставив кнопку мыши мыши. https://docs.oracle.com/javase/7/docs/api/java/awt/Robot.html

Ответ 2

Можете ли вы попробовать добавить функцию ACCEPT_SSL_CERT к веб-драйверу?

    DesiredCapabilities capabilities = new DesiredCapabilities();
    capabilities.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
    System.setProperty("webdriver.ie.driver", "IEDriverServer.exe");
    WebDriver driver = new InternetExplorerDriver(capabilities);