mrks
mrks

Reputation: 5631

WebdriverIO - Get browser logs

I want to get the browser logs (console.logs) from chrome with WebdriverIO's log functionality but all I get is, that the function log is not a function.

var WebdriverIO = require('webdriverio');
var chai = require('chai');
var _ = require('lodash');
var chaiAsPromised = require('chai-as-promised');

var expect = chai.expect;
chai.use(chaiAsPromised);

var browser = {
  host: '127.0.0.1',
  port: 4444,
  desiredCapabilities: {
    browserName : 'chrome',
    chromeOptions: {
      args: [
        'no-sandbox',
        'use-fake-device-for-media-stream',
        'use-fake-ui-for-media-stream',
        'mute-audio',
      ]
    },
    loggingPrefs: {
      'driver': 'INFO',
      'browser': 'INFO'
    }
  },
};

var matrix = WebdriverIO.multiremote({
  browserA: browser,
  browserB: browser,
});

chaiAsPromised.transferPromiseness = matrix.transferPromiseness;

var browserA = matrix.select('browserA');
var browserB = matrix.select('browserB');

it('should initialize browsers', function() {
  return matrix.init();
});

it('should open two browsers', function(done) {
  browserA.url('https://127.0.0.1:3000/');
  browserB.url('https://127.0.0.1:3000/');

  matrix.timeouts('implicit', 15000);

  matrix.sync().call(done);
});

it('should return logs', function(done) {
  browserA
      .log('browser', function(err, msg, a) {
          console.log(msg);
      })
      .call(done);
});

Does someone know how to use this function properly? It also doesnt work when I just use one browser and not creating a Matrix like I did in the code snippet.

Upvotes: 3

Views: 5230

Answers (1)

ChristianB
ChristianB

Reputation: 1977

You are using the API wrong. You can not pass in a callback to the log method. The command returns a promise (if you use a standalone script like that) so you need to do:

browserA
  .log('browser').then(function(msg) {
      console.log(msg);
  })

Upvotes: 4

Related Questions