Using Selenium and webdriver to interact with insecure SSL pages in Firefox

Interacting with insecure SSL pages (eg. self-signed) in an automated test written for Selenium is an important feature. Especially when tests are getting run against locally served test pages. Under those circumstances you might never get fully secured websites served to the browser instance under test. To still allow running your tests with a successful test result, Selenium can instruct the browser to ignore the validity check, which will simply browse to the specified site without bringing up the SSL error page.

Since the default driver for Firefox was switched in Selenium 3.0 to Marionette by default, this feature was broken for a while, unless you explicitly opted-out from using it. The reason is that Marionette, which is the automation driver for Mozilla’s Gecko engine, hasn’t implement it yet. But now with bug 1103196 fixed, the feature is available starting with the upcoming Firefox 52.0 release, which will soon be available as Beta build.

Given that a couple of people have problems to get it working correctly, I wrote a basic Selenium test for Firefox by using the Python’s unittest framework. I hope that it helps you to figure out the remaining issues. But please keep in mind that you need at least a Firefox 52.0 build.

Here the code:

import unittest

from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities


class InsecureSSLTestCase(unittest.TestCase):

    def setUp(self):
        self.test_url = 'https://self-signed.badssl.com/'

        capabilities = DesiredCapabilities.FIREFOX.copy()
        self.driver = webdriver.Firefox(capabilities=capabilities,
                                        firefox_binary='/path/to/firefox/binary')
        self.addCleanup(self.driver.quit)

    def test_page(self):
        self.driver.get(self.test_url)
        self.assertEqual(self.driver.current_url, self.test_url)

if __name__ == '__main__':
    unittest.main(verbosity=2)

By using DesiredCapabilities.FIREFOX the default capabilities for Firefox will be retrieved and used. Those will also include “marionette: True“, which is necessary to enable webdriver for Firefox in Selenium 3. If not present the old FirefoxDriver will be utilized.

To actually enable accepting insecure SSL pages, the capabilities have to be updated with “acceptInsecureCerts: True“, and then passed into the Firefox’s Webdriver constructor.

That’s all. So enjoy!

Update: The capability for acceptInsecureCerts is set automatically when DesiredCapabilities.FIREFOX is used.