I want to log one of the variables inside the playwright test case but am unable to load the log in developer tools console as I am using a page.on() function
test('largest contentful paint', async ({ page }) => {
await page.goto('http://localhost:3000/', { waitUntil: 'networkidle' });
const largestContentfulPaint = await page.evaluate(() => {
return new Promise((resolve) => {
new PerformanceObserver((l) => {
const entries = l.getEntries();
// the last entry is the largest contentful paint
const largestPaintEntry = entries.at(-1);
page.on('console', () => {
console.log('largestPaintEntry', largestPaintEntry);
});
// resolve(largestPaintEntry.startTime);
}).observe({
type: 'largest-contentful-paint',
buffered: true,
});
});
});
await expect(largestContentfulPaint).toBeLessThan(2500);
});
I want to log one of the variables inside the playwright test case but am unable to load the log in developer tools console as I am using a page.on() function
test('largest contentful paint', async ({ page }) => {
await page.goto('http://localhost:3000/', { waitUntil: 'networkidle' });
const largestContentfulPaint = await page.evaluate(() => {
return new Promise((resolve) => {
new PerformanceObserver((l) => {
const entries = l.getEntries();
// the last entry is the largest contentful paint
const largestPaintEntry = entries.at(-1);
page.on('console', () => {
console.log('largestPaintEntry', largestPaintEntry);
});
// resolve(largestPaintEntry.startTime);
}).observe({
type: 'largest-contentful-paint',
buffered: true,
});
});
});
await expect(largestContentfulPaint).toBeLessThan(2500);
});
Share
Improve this question
asked Jan 10, 2023 at 4:09
KnightCrawlerKnightCrawler
7203 gold badges9 silver badges23 bronze badges
2
|
2 Answers
Reset to default 5As mentioned in a comment, the problem is that you must attach the page.on
event handler outside the page.evaluate()
callback.
// @ts-check
const { test, expect } = require('@playwright/test');
test('largest contentful paint', async ({ page }) => {
await page.goto('https://www.stefanjudis.com/', { waitUntil: 'networkidle' });
page.on('console', (msg) => {
console.log(msg);
});
const largestContentfulPaint = await page.evaluate(() => {
return new Promise((resolve) => {
new PerformanceObserver((l) => {
const entries = l.getEntries();
// the last entry is the largest contentful paint
const largestPaintEntry = entries.at(-1);
console.log(largestPaintEntry.startTime)
}).observe({
type: 'largest-contentful-paint',
buffered: true,
});
});
});
await expect(largestContentfulPaint).toBeLessThan(2500);
});
You need to forward it:
const { test, expect } = require('@playwright/test');
test('largest contentful paint', async ({ page }) => {
await page.goto('https://www.stefanjudis.com/', { waitUntil: 'networkidle' });
page.on('console', async (msg) => {
const msgArgs = msg.args();
const logValues = await Promise.all(msgArgs.map(async arg => await arg.jsonValue()));
console.log(...logValues);
});
const largestContentfulPaint = await page.evaluate(() => {
return new Promise((resolve) => {
new PerformanceObserver((l) => {
const entries = l.getEntries();
// the last entry is the largest contentful paint
const largestPaintEntry = entries.at(-1);
console.log(largestPaintEntry.startTime)
}).observe({
type: 'largest-contentful-paint',
buffered: true,
});
});
});
await expect(largestContentfulPaint).toBeLessThan(2500);
});
page.on
should be added once, up front, before you do anything that triggers the log you want to see.page.on
is a Puppeteer/Node thing, but you're running it in the browser wherepage
doesn't exist. – ggorlen Commented Jan 10, 2023 at 5:15npx playwright test --ui
– sunyata Commented Dec 6, 2024 at 15:00