Reputation: 1671
I'm trying to use selenium-webdriver
to test a site that uses a self-signed certificate.
To pass the tests under Firefox, it is required to use a profile that tells Firefox to accept the self-signed certificate.
I was able to use a profile created using firefox -ProfileManager
. However, I'm not able to use a profile that is created programmatically.
Can anybody tell what I'm missing here?
Here is the javascript
program that uses the profile created by firefox -ProfileManager
:
var webdriver = require('selenium-webdriver');
var firefox = require('selenium-webdriver/firefox');
var profile = new firefox.Profile('/path/to/firefox/profile');
var browser = new firefox.Driver(new firefox.Options().setProfile(profile));
browser.get('https://self-signed.badssl.com/');
browser.quit();
And here is the javascript
program that uses the profile created by code:
var webdriver = require('selenium-webdriver');
var firefox = require('selenium-webdriver/firefox');
var profile = new firefox.Profile();
profile.setAcceptUntrustedCerts(true);
profile.setAssumeUntrustedCertIssuer(false); // `true` didn't work too
var browser = new firefox.Driver(new firefox.Options().setProfile(profile));
browser.get('https://self-signed.badssl.com/');
browser.quit();
The error I'm getting with the second program is as follows:
$ node test-firefox-profile.js
/user/ws/node_modules/selenium-webdriver/lib/promise.js:654
throw error;
^
WebDriverError: Error loading page
at WebDriverError (/user/ws/node_modules/selenium-webdriver/lib/error.js:27:10)
at Object.throwDecodedError (/user/ws/node_modules/selenium-webdriver/lib/error.js:477:11)
at parseHttpResponse (/user/ws/node_modules/selenium-webdriver/lib/http.js:386:15)
at /user/ws/node_modules/selenium-webdriver/lib/http.js:328:11
at process._tickCallback (node.js:369:9)
From: Task: WebDriver.navigate().to(https://self-signed.badssl.com/)
at Driver.schedule (/user/ws/node_modules/selenium-webdriver/lib/webdriver.js:414:17)
at Navigation.to (/user/ws/node_modules/selenium-webdriver/lib/webdriver.js:1042:25)
at Driver.get (/user/ws/node_modules/selenium-webdriver/lib/webdriver.js:832:28)
at Object.<anonymous> (/user/ws/test-firefox-profile.js:9:9)
at Module._compile (module.js:409:26)
at Object.Module._extensions..js (module.js:416:10)
at Module.load (module.js:343:32)
at Function.Module._load (module.js:300:12)
at Function.Module.runMain (module.js:441:10)
at startup (node.js:139:18)
Upvotes: 3
Views: 9431
Reputation: 4095
This worked for me.
driver = new webdriver.Builder().withCapabilities({'browserName': 'firefox', acceptSslCerts: true, acceptInsecureCerts: true});
Upvotes: 3
Reputation: 11050
When answering another question, I stumbled upon this question. Eventually I figured out the answer.
What worked for me was using the Builder
instead of trying to use a firefox.Driver
:
var webdriver = require('selenium-webdriver'),
firefox = require('selenium-webdriver/firefox'),
driver = null,
profile = new firefox.Profile();
profile.setAcceptUntrustedCerts(true);
profile.setAssumeUntrustedCertIssuer(false);
var opts = new firefox.Options();
opts.setProfile(profile);
var builder = new webdriver.Builder().forBrowser('firefox');
builder.setFirefoxOptions(opts);
driver = builder.build();
driver.get('https://www.google.com');
driver.quit();
Of course, all methods of the firefox.Profile
can be used before setting it in the firefox.Options
and passing those to the builder.
Note that the builder will still return an instance of a firefox.Driver
.
Upvotes: 2