Skip to content

Support Lighthouse (Browser #1832) #15

@Snooz82

Description

@Snooz82

Originally posten in MarketSquare/robotframework-browser#1832
by eldaduzman opened on Mar 5, 2022

Moved...

Is your feature request related to a problem? Please describe.

Google lighthouse is an awesome client side performance and accessibility testing tool.

It has a good integration with playwright using an nmp package.

It can be very easily used by rf-browser with JS extension, For example:

js-extensions/rfbrowser-lighthouse.js:

const { playAudit } = require('playwright-lighthouse');
var path = require('path');
async function runGoogleLighthouse(page, args) {
  await playAudit({
    page: page,
    port: args[0],
    thresholds: {
      performance: 20,
      accessibility: 80,
      'best-practices': 20,
      seo: 80,
      pwa: 20,
    },
    reports: {
      formats: {
        html: true,
        csv: true,
      },
      directory: path.join(args[1], `lighthouse`)
    }
  });
}
runGoogleLighthouse.rfdoc = "Executes googles lighthouse on current page context";
exports.__esModule = true;
exports.runGoogleLighthouse = runGoogleLighthouse;

test.robot:

*** Settings ***
Library           Browser    jsextension=${CURDIR}/js-extensions/rfbrowser-lighthouse.js
Library           Collections

*** Variables ***
${PORT}           9222

*** Test Cases ***
Example Test
    ${args}    Create List    --remote-debugging-port=${PORT}
    New Context    args=${args}
    New Browser    headless=false
    New Page    https://playwright.dev

    Run Google Lighthouse    ${PORT}    ${CURDIR}

The problem is when you need to authenticate. Lighthouse opens a new browser context and this means that all authentication fields are gone.

Describe the solution you'd like One option is to use Persistent Context with playwrights launchPersistentContext function. This can take a directory for storage and other properties and then when lighthouse is activated it keeps the context.

So I guess adding a new persistent context keyword which takes a path as first input and all the other context arguments next would solve this problem.

Describe alternatives you've considered Maybe it is possible to explicitly support executing lighthouse from rf-browser using a designated keyword, however this might not be flexible enough, + it could require too much maintenance efforts.

Additional context I've tried to create a persistent context with a js extention:

async function getPersistentContextPage(page, args, logger, playwright) {
  tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), appPrefix));
  logger(tmpDir);
  context= await playwright['chromium'].launchPersistentContext(tmpDir, {
    args: ['--remote-debugging-port=9222'],
    headless: false
  });
  logger('done creating');

  return context
}

But it's not being stored on rf-browsers cache so it doesn't solve the problem.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions