Selenium Javascript Webdriver:如何设置Firefox配置文件以接受自签名证书

时间:2016-09-03 17:24:01

标签: selenium-webdriver firefox-profile

我尝试使用selenium-webdriver来测试使用自签名证书的网站。

要在Firefox下传递测试,需要使用告知Firefox接受自签名证书的配置文件。

我能够使用firefox -ProfileManager创建的个人资料。但是,我无法使用以编程方式创建的配置文件。

有人能说出我在这里失踪了吗?

以下是使用javascript创建的个人资料的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();

以下是使用代码创建的配置文件的javascript程序:

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();

我在第二个程序中遇到的错误如下:

$ 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)

2 个答案:

答案 0 :(得分:2)

这对我有用。 driver = new webdriver.Builder().withCapabilities({'browserName': 'firefox', acceptSslCerts: true, acceptInsecureCerts: true});

答案 1 :(得分:1)

answering另一个问题时,我偶然发现了这个问题。最终我找到了答案。

对我有用的是使用Builder而不是尝试使用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();

当然,firefox.Profile中的所有方法都可以在firefox.Options中设置并将其传递给构建器之前使用。

请注意,构建器仍将返回firefox.Driver的实例。