Skip to content

Commit a0c0fe5

Browse files
committed
Fix sticky header issue for FPS
1 parent 316bd8f commit a0c0fe5

File tree

6 files changed

+44
-16
lines changed

6 files changed

+44
-16
lines changed

package.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@
3737
"fastify": "^4.24.3",
3838
"form-data": "^4.0.0",
3939
"listr2": "^7.0.1",
40-
"scroll-to-bottomjs": "^1.1.0",
4140
"tsup": "^7.2.0",
4241
"which": "^4.0.0",
4342
"winston": "^3.10.0"

pnpm-lock.yaml

Lines changed: 0 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/lib/screenshot.ts

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { chromium, firefox, webkit, Browser } from "@playwright/test"
22
import { Context, WebStaticConfig } from "../types.js"
3-
import { delDir, ensureHttps } from "./utils.js"
4-
import scrollToBottom from 'scroll-to-bottomjs'
3+
import { delDir, ensureHttps, scrollToBottomAndBackToTop } from "./utils.js"
4+
import chalk from 'chalk';
55

66
const BROWSER_CHROME = 'chrome';
77
const BROWSER_SAFARI = 'safari';
@@ -18,7 +18,8 @@ export async function captureScreenshots(ctx: Context, screenshots: WebStaticCon
1818
// Capture screenshots for every browser-viewport and upload them
1919
let totalBrowsers: number = ctx.webConfig.browsers.length;
2020
let totalViewports: number = ctx.webConfig.viewports.length;
21-
let totalScreenshots: number = screenshots.length
21+
let totalScreenshots: number = screenshots.length;
22+
let capturedScreenshots: number = 0;
2223
for (let i = 0; i < totalBrowsers; i++) {
2324
let browserName = ctx.webConfig.browsers[i]?.toLowerCase();
2425
let browser: Browser;
@@ -60,13 +61,16 @@ export async function captureScreenshots(ctx: Context, screenshots: WebStaticCon
6061
let ssName = `${browserName}-${width}x${height}-${screenshotId}.png`
6162
let ssPath = `screenshots/${screenshotId}/${ssName}.png`
6263
await page.setViewportSize({ width, height: height || MIN_RESOLUTION_HEIGHT })
63-
if (height === 0) await page.evaluate(scrollToBottom)
64-
await page.waitForTimeout(screenshot.waitForTimeout || 0)
64+
if (height === 0) await page.evaluate(scrollToBottomAndBackToTop);
65+
await page.waitForTimeout(screenshot.waitForTimeout || 0);
6566
await page.screenshot({ path: ssPath, fullPage: height ? false: true });
6667

6768
let completed = (i == (totalBrowsers-1) && j == (totalScreenshots-1) && k == (totalViewports-1)) ? true : false;
6869
browserName = browserName === BROWSER_SAFARI ? PW_WEBKIT : browserName;
6970
ctx.client.uploadScreenshot(ctx.build, ssPath, screenshot.name, browserName, `${width}x${height}`, completed);
71+
capturedScreenshots++;
72+
73+
ctx.task.output = chalk.gray(`screenshots captured: ${capturedScreenshots}/${totalBrowsers * totalViewports * totalScreenshots}`);
7074
}
7175

7276
await page.close();

src/lib/utils.ts

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,4 +25,35 @@ export function ensureHttps(urlString: string) {
2525
console.error('Invalid URL: '+urlString, error);
2626
return null;
2727
}
28+
}
29+
30+
export function scrollToBottomAndBackToTop({
31+
frequency = 100,
32+
timing = 8,
33+
remoteWindow = window
34+
} = {}): Promise<void> {
35+
return new Promise(resolve => {
36+
let scrolls = 1;
37+
let scrollLength = remoteWindow.document.body.scrollHeight / frequency;
38+
39+
(function scroll() {
40+
let scrollBy = scrollLength * scrolls;
41+
42+
remoteWindow.setTimeout(() => {
43+
remoteWindow.scrollTo(0, scrollBy);
44+
45+
if (scrolls < frequency) {
46+
scrolls += 1;
47+
scroll();
48+
}
49+
50+
if (scrolls === frequency) {
51+
remoteWindow.setTimeout(() => {
52+
remoteWindow.scrollTo(0,0)
53+
resolve();
54+
}, timing);
55+
}
56+
}, timing);
57+
})();
58+
});
2859
}

src/tasks/captureScreenshots.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@ export default (ctx: Context): ListrTask<Context, ListrRendererFactory, ListrRen
88
title: 'Capturing screenshots',
99
task: async (ctx, task): Promise<void> => {
1010
try {
11-
let { webStaticConfig: screenshots } = ctx;
11+
ctx.task = task;
1212

13-
let totalScreenshots = await captureScreenshots(ctx, screenshots);
13+
let totalScreenshots = await captureScreenshots(ctx, ctx.webStaticConfig);
1414
task.title = 'Screenshots captured successfully'
1515
task.output = chalk.gray(`total screenshots: ${totalScreenshots}`)
1616
} catch (error: any) {

src/types.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,12 @@ import { Server, IncomingMessage, ServerResponse } from 'http'
22
import { FastifyInstance } from 'fastify'
33
import httpClient from './lib/httpClient.js'
44
import type { Logger } from 'winston'
5+
import { ListrTaskWrapper, ListrRenderer } from "listr2";
56

67
export interface Context {
78
env: Env;
89
log: Logger;
10+
task: ListrTaskWrapper<Context, typeof ListrRenderer, typeof ListrRenderer>
911
server?: FastifyInstance<Server, IncomingMessage, ServerResponse>;
1012
client: httpClient;
1113
webConfig: {
@@ -22,7 +24,6 @@ export interface Context {
2224
}
2325
cliVersion: string;
2426
totalSnapshots: number;
25-
2627
}
2728

2829
export interface Env {

0 commit comments

Comments
 (0)