Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support Lighthouse (Browser #1832) #15

Open
Snooz82 opened this issue Nov 15, 2023 · 0 comments
Open

Support Lighthouse (Browser #1832) #15

Snooz82 opened this issue Nov 15, 2023 · 0 comments

Comments

@Snooz82
Copy link
Member

Snooz82 commented Nov 15, 2023

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant