mirror of
https://github.com/web-infra-dev/midscene.git
synced 2025-12-12 07:21:26 +00:00
feat: use jpeg as default image format (#301)
--------- Co-authored-by: zhouxiao.shaw <zhouxiao.shaw@bytedance.com>
This commit is contained in:
parent
e6ad45ca7e
commit
3aa1b33955
@ -40,10 +40,10 @@ function getReportTpl() {
|
|||||||
if (!reportTpl && (window as any).get_midscene_report_tpl) {
|
if (!reportTpl && (window as any).get_midscene_report_tpl) {
|
||||||
reportTpl = (window as any).get_midscene_report_tpl();
|
reportTpl = (window as any).get_midscene_report_tpl();
|
||||||
}
|
}
|
||||||
assert(
|
// assert(
|
||||||
reportTpl,
|
// reportTpl,
|
||||||
'reportTpl should be set before writing report in browser',
|
// 'reportTpl should be set before writing report in browser',
|
||||||
);
|
// );
|
||||||
return reportTpl;
|
return reportTpl;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -70,6 +70,10 @@ export function reportHTMLContent(
|
|||||||
dumpData: string | ReportDumpWithAttributes[],
|
dumpData: string | ReportDumpWithAttributes[],
|
||||||
): string {
|
): string {
|
||||||
const tpl = getReportTpl();
|
const tpl = getReportTpl();
|
||||||
|
if (!tpl) {
|
||||||
|
console.warn('reportTpl is not set, will not write report');
|
||||||
|
return '';
|
||||||
|
}
|
||||||
let reportContent: string;
|
let reportContent: string;
|
||||||
if (
|
if (
|
||||||
(Array.isArray(dumpData) && dumpData.length === 0) ||
|
(Array.isArray(dumpData) && dumpData.length === 0) ||
|
||||||
@ -121,6 +125,10 @@ export function writeDumpReport(
|
|||||||
|
|
||||||
const reportPath = join(getLogDirByType('report'), `${fileName}.html`);
|
const reportPath = join(getLogDirByType('report'), `${fileName}.html`);
|
||||||
const reportContent = reportHTMLContent(dumpData);
|
const reportContent = reportHTMLContent(dumpData);
|
||||||
|
if (!reportContent) {
|
||||||
|
console.warn('reportContent is empty, will not write report');
|
||||||
|
return null;
|
||||||
|
}
|
||||||
writeFileSync(reportPath, reportContent);
|
writeFileSync(reportPath, reportContent);
|
||||||
|
|
||||||
return reportPath;
|
return reportPath;
|
||||||
|
|||||||
@ -238,7 +238,8 @@ export const compositeElementInfoImg = async (options: {
|
|||||||
return compositeImage;
|
return compositeImage;
|
||||||
})
|
})
|
||||||
.then(async (compositeImage: Jimp) => {
|
.then(async (compositeImage: Jimp) => {
|
||||||
const base64 = await compositeImage.getBase64Async(Jimp.MIME_PNG);
|
compositeImage.quality(75);
|
||||||
|
const base64 = await compositeImage.getBase64Async(Jimp.MIME_JPEG);
|
||||||
return base64;
|
return base64;
|
||||||
})
|
})
|
||||||
.catch((error: unknown) => {
|
.catch((error: unknown) => {
|
||||||
|
|||||||
@ -41,7 +41,8 @@ export async function drawBoxOnImage(options: {
|
|||||||
);
|
);
|
||||||
|
|
||||||
// Convert back to base64
|
// Convert back to base64
|
||||||
const resultBase64 = await image.getBase64Async(Jimp.MIME_PNG);
|
image.quality(75);
|
||||||
|
const resultBase64 = await image.getBase64Async(Jimp.MIME_JPEG);
|
||||||
return resultBase64;
|
return resultBase64;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -36,7 +36,7 @@ export async function transformImgPathToBase64(inputPath: string) {
|
|||||||
// Use Jimp to process images and generate base64 data
|
// Use Jimp to process images and generate base64 data
|
||||||
const Jimp = await getJimp();
|
const Jimp = await getJimp();
|
||||||
const image = await Jimp.read(inputPath);
|
const image = await Jimp.read(inputPath);
|
||||||
const buffer = await image.getBufferAsync(Jimp.MIME_PNG);
|
const buffer = await image.getBufferAsync(Jimp.MIME_JPEG);
|
||||||
return buffer.toString('base64');
|
return buffer.toString('base64');
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -72,7 +72,8 @@ export async function resizeImg(
|
|||||||
finalNewSize.height,
|
finalNewSize.height,
|
||||||
Jimp.RESIZE_NEAREST_NEIGHBOR,
|
Jimp.RESIZE_NEAREST_NEIGHBOR,
|
||||||
);
|
);
|
||||||
const resizedBuffer = await image.getBufferAsync(Jimp.MIME_PNG);
|
image.quality(75);
|
||||||
|
const resizedBuffer = await image.getBufferAsync(Jimp.MIME_JPEG);
|
||||||
|
|
||||||
return resizedBuffer;
|
return resizedBuffer;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -62,27 +62,31 @@ function emptyDumpReportHTML() {
|
|||||||
|
|
||||||
const tplRetrieverFn = `window.get_midscene_report_tpl = () => {
|
const tplRetrieverFn = `window.get_midscene_report_tpl = () => {
|
||||||
const tpl = document.getElementById('midscene_report_tpl').innerText;
|
const tpl = document.getElementById('midscene_report_tpl').innerText;
|
||||||
|
if (!tpl) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
const tplDecoded = decodeURIComponent(tpl);
|
const tplDecoded = decodeURIComponent(tpl);
|
||||||
return tplDecoded;
|
return tplDecoded;
|
||||||
};`;
|
};`;
|
||||||
function putReportTplIntoHTML(html: string, outsourceMode = false) {
|
function putReportTplIntoHTML(html: string, outsourceMode = false) {
|
||||||
assert(html.indexOf('</body>') !== -1, 'HTML must contain </body>');
|
assert(html.indexOf('</body>') !== -1, 'HTML must contain </body>');
|
||||||
|
|
||||||
const tplWrapper = `<noscript id="midscene_report_tpl">\n${encodeURIComponent(
|
|
||||||
emptyDumpReportHTML(),
|
|
||||||
)}\n</noscript>`;
|
|
||||||
|
|
||||||
if (outsourceMode) {
|
if (outsourceMode) {
|
||||||
|
const tplWrapper = `<noscript id="midscene_report_tpl">\n${encodeURIComponent(
|
||||||
|
emptyDumpReportHTML(),
|
||||||
|
)}\n</noscript>`;
|
||||||
// in Chrome extension
|
// in Chrome extension
|
||||||
return html.replace(
|
return html.replace(
|
||||||
'</body>',
|
'</body>',
|
||||||
`${tplWrapper}<script src="/lib/set-report-tpl.js"></script>\n</body>`,
|
`${tplWrapper}<script src="/lib/set-report-tpl.js"></script>\n</body>`,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
return html.replace(
|
|
||||||
'</body>',
|
return html;
|
||||||
`${tplWrapper}<script>${tplRetrieverFn}</script>\n</body>`,
|
// return html.replace(
|
||||||
);
|
// '</body>',
|
||||||
|
// `${tplWrapper}<script>${tplRetrieverFn}</script>\n</body>`,
|
||||||
|
// );
|
||||||
}
|
}
|
||||||
|
|
||||||
function reportHTMLWithDump(
|
function reportHTMLWithDump(
|
||||||
@ -95,8 +99,15 @@ function reportHTMLWithDump(
|
|||||||
dumpContent = `<script type="midscene_web_dump">\n${dumpJsonString}\n</script>`;
|
dumpContent = `<script type="midscene_web_dump">\n${dumpJsonString}\n</script>`;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const emptyDumpHTML = emptyDumpReportHTML();
|
||||||
|
assert(
|
||||||
|
emptyDumpHTML.length <
|
||||||
|
(process.env.CI ? 10 * 1000 * 1000 : 20 * 1000 * 1000),
|
||||||
|
`emptyDumpHTML is too large, length: ${emptyDumpHTML.length}`,
|
||||||
|
);
|
||||||
|
|
||||||
const reportHTML = replaceStringWithFirstAppearance(
|
const reportHTML = replaceStringWithFirstAppearance(
|
||||||
emptyDumpReportHTML(),
|
emptyDumpHTML,
|
||||||
'{{dump}}',
|
'{{dump}}',
|
||||||
dumpContent || '{{dump}}',
|
dumpContent || '{{dump}}',
|
||||||
);
|
);
|
||||||
|
|||||||
@ -438,7 +438,11 @@ export function Playground({
|
|||||||
replayScripts={replayScriptsInfo.scripts}
|
replayScripts={replayScriptsInfo.scripts}
|
||||||
imageWidth={replayScriptsInfo.width}
|
imageWidth={replayScriptsInfo.width}
|
||||||
imageHeight={replayScriptsInfo.height}
|
imageHeight={replayScriptsInfo.height}
|
||||||
reportFileContent={result?.reportHTML}
|
reportFileContent={
|
||||||
|
serviceMode === 'In-Browser-Extension' && result?.reportHTML
|
||||||
|
? result?.reportHTML
|
||||||
|
: null
|
||||||
|
}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
} else if (result?.result) {
|
} else if (result?.result) {
|
||||||
|
|||||||
@ -55,20 +55,13 @@ export class Page<
|
|||||||
async screenshotBase64(): Promise<string> {
|
async screenshotBase64(): Promise<string> {
|
||||||
// get viewport size from underlyingPage
|
// get viewport size from underlyingPage
|
||||||
// const viewportSize = await this.size();
|
// const viewportSize = await this.size();
|
||||||
const path = getTmpFile('png')!;
|
const imgType = 'jpeg';
|
||||||
|
const path = getTmpFile(imgType)!;
|
||||||
await this.underlyingPage.screenshot({
|
await this.underlyingPage.screenshot({
|
||||||
path,
|
path,
|
||||||
type: 'png',
|
type: imgType,
|
||||||
|
quality: 75,
|
||||||
});
|
});
|
||||||
// let buf: Buffer;
|
|
||||||
// if (viewportSize.dpr && viewportSize.dpr > 1) {
|
|
||||||
// buf = await resizeImg(readFileSync(path), {
|
|
||||||
// width: viewportSize.width,
|
|
||||||
// height: viewportSize.height,
|
|
||||||
// });
|
|
||||||
// writeFileSync(path, buf);
|
|
||||||
// }
|
|
||||||
|
|
||||||
return base64Encoded(path, true);
|
return base64Encoded(path, true);
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user