I'm trying to capture console errors in my selenium tests (node environment with selenium-webdriver 4.0.0-alpha.5 and the latest geckodriver and chromedriver). I've set up one driver for Firefox and another one for Chrome like this:
const chrome = require('selenium-webdriver/chrome');
const firefox = require('selenium-webdriver/firefox');
const webdriver = require('selenium-webdriver');
const { Builder, By, Capabilities, until } = webdriver;
let loggingPref = new webdriver.logging.Preferences();
loggingPref.setLevel( 'browser', webdriver.logging.Level.SEVERE );
let driver_fx = await new Builder()
.withCapabilities(
Capabilities.firefox()
.set("acceptInsecureCerts", true)
)
.setLoggingPrefs( loggingPref )
.build();
let driver_chr = await new Builder()
.forBrowser('chrome')
.setLoggingPrefs( loggingPref )
.build();
This is the function that should get the error logs:
const getConsoleErrors = (driver) => {
return driver.manage().logs().get('browser').then((logs) => {
return logs.map(( log ) => log.message );
});
}
With the chrome driver, this works as intended:
await driver.get(devUrl);
let errors = await getConsoleErrors(driver_chr);
console.log(errors);
// output:
// [ 'https://mylocaldevserver/with/path 465:61 Uncaught TypeError: Cannot read property \'textContent\' of null' ]
However, when passing driver_fx
to the function instead, this results in the following exception:
WebDriverError: HTTP method not allowed
at parseHttpResponse (***\node_modules\selenium-webdriver\lib\http.js:580:11)
at Executor.execute (***\node_modules\selenium-webdriver\lib\http.js:489:26)
at process._tickCallback (internal/process/next_tick.js:68:7)
Is this a bug in selenium or geckodriver, or is it the way I construct the Firefox driver differently (which I need to do for it to ignore the certificate of my local dev server)?