Best JavaScript code snippet using playwright-internal
background.js
Source:background.js
...405 if (a32[i] !== b32[i]) { identical = false; break; }406 }407 if (identical) { // fast path if identical408 if (output && !options.diffMask) {409 for (let i = 0; i < len; i++) drawGrayPixel(img1, 4 * i, options.alpha, output);410 }411 return 0;412 }413 // maximum acceptable square distance between two colors;414 // 35215 is the maximum possible value for the YIQ difference metric415 const maxDelta = 35215 * options.threshold * options.threshold;416 let diff = 0;417 const [aaR, aaG, aaB] = options.aaColor;418 const [diffR, diffG, diffB] = options.diffColor;419 // compare each pixel of one image against the other one420 for (let y = 0; y < height; y++) {421 for (let x = 0; x < width; x++) {422 const pos = (y * width + x) * 4;423 // squared YUV distance between colors at this pixel position424 const delta = colorDelta(img1, img2, pos, pos);425 // the color difference is above the threshold426 if (delta > maxDelta) {427 // check it's a real rendering difference or just anti-aliasing428 if (!options.includeAA && (antialiased(img1, x, y, width, height, img2) ||429 antialiased(img2, x, y, width, height, img1))) {430 // one of the pixels is anti-aliasing; draw as yellow and do not count as difference431 // note that we do not include such pixels in a mask432 if (output && !options.diffMask) drawPixel(output, pos, aaR, aaG, aaB);433 } else {434 // found substantial difference not caused by anti-aliasing; draw it as red435 if (output) {436 drawPixel(output, pos, diffR, diffG, diffB);437 diff++;438 }439 }440 } else if (output) {441 // pixels are similar; draw background as grayscale image blended with white442 if (!options.diffMask) drawGrayPixel(img1, pos, options.alpha, output);443 }444 }445 }446 // return the number of different pixels447 return diff;448}449function isPixelData(arr) {450 // work around instanceof Uint8Array not working properly in some Jest environments451 return ArrayBuffer.isView(arr) && arr.constructor.BYTES_PER_ELEMENT === 1;452}453// check if a pixel is likely a part of anti-aliasing;454// based on "Anti-aliased Pixel and Intensity Slope Detector" paper by V. Vysniauskas, 2009455function antialiased(img, x1, y1, width, height, img2) {456 const x0 = Math.max(x1 - 1, 0);457 const y0 = Math.max(y1 - 1, 0);458 const x2 = Math.min(x1 + 1, width - 1);459 const y2 = Math.min(y1 + 1, height - 1);460 const pos = (y1 * width + x1) * 4;461 let zeroes = x1 === x0 || x1 === x2 || y1 === y0 || y1 === y2 ? 1 : 0;462 let min = 0;463 let max = 0;464 let minX, minY, maxX, maxY;465 // go through 8 adjacent pixels466 for (let x = x0; x <= x2; x++) {467 for (let y = y0; y <= y2; y++) {468 if (x === x1 && y === y1) continue;469 // brightness delta between the center pixel and adjacent one470 const delta = colorDelta(img, img, pos, (y * width + x) * 4, true);471 // count the number of equal, darker and brighter adjacent pixels472 if (delta === 0) {473 zeroes++;474 // if found more than 2 equal siblings, it's definitely not anti-aliasing475 if (zeroes > 2) return false;476 // remember the darkest pixel477 } else if (delta < min) {478 min = delta;479 minX = x;480 minY = y;481 // remember the brightest pixel482 } else if (delta > max) {483 max = delta;484 maxX = x;485 maxY = y;486 }487 }488 }489 // if there are no both darker and brighter pixels among siblings, it's not anti-aliasing490 if (min === 0 || max === 0) return false;491 // if either the darkest or the brightest pixel has 3+ equal siblings in both images492 // (definitely not anti-aliased), this pixel is anti-aliased493 return (hasManySiblings(img, minX, minY, width, height) && hasManySiblings(img2, minX, minY, width, height)) ||494 (hasManySiblings(img, maxX, maxY, width, height) && hasManySiblings(img2, maxX, maxY, width, height));495}496// check if a pixel has 3+ adjacent pixels of the same color.497function hasManySiblings(img, x1, y1, width, height) {498 const x0 = Math.max(x1 - 1, 0);499 const y0 = Math.max(y1 - 1, 0);500 const x2 = Math.min(x1 + 1, width - 1);501 const y2 = Math.min(y1 + 1, height - 1);502 const pos = (y1 * width + x1) * 4;503 let zeroes = x1 === x0 || x1 === x2 || y1 === y0 || y1 === y2 ? 1 : 0;504 // go through 8 adjacent pixels505 for (let x = x0; x <= x2; x++) {506 for (let y = y0; y <= y2; y++) {507 if (x === x1 && y === y1) continue;508 const pos2 = (y * width + x) * 4;509 if (img[pos] === img[pos2] &&510 img[pos + 1] === img[pos2 + 1] &&511 img[pos + 2] === img[pos2 + 2] &&512 img[pos + 3] === img[pos2 + 3]) zeroes++;513 if (zeroes > 2) return true;514 }515 }516 return false;517}518// calculate color difference according to the paper "Measuring perceived color difference519// using YIQ NTSC transmission color space in mobile applications" by Y. Kotsarenko and F. Ramos520function colorDelta(img1, img2, k, m, yOnly) {521 let r1 = img1[k + 0];522 let g1 = img1[k + 1];523 let b1 = img1[k + 2];524 let a1 = img1[k + 3];525 let r2 = img2[m + 0];526 let g2 = img2[m + 1];527 let b2 = img2[m + 2];528 let a2 = img2[m + 3];529 if (a1 === a2 && r1 === r2 && g1 === g2 && b1 === b2) return 0;530 if (a1 < 255) {531 a1 /= 255;532 r1 = blend(r1, a1);533 g1 = blend(g1, a1);534 b1 = blend(b1, a1);535 }536 if (a2 < 255) {537 a2 /= 255;538 r2 = blend(r2, a2);539 g2 = blend(g2, a2);540 b2 = blend(b2, a2);541 }542 const y = rgb2y(r1, g1, b1) - rgb2y(r2, g2, b2);543 if (yOnly) return y; // brightness difference only544 const i = rgb2i(r1, g1, b1) - rgb2i(r2, g2, b2);545 const q = rgb2q(r1, g1, b1) - rgb2q(r2, g2, b2);546 return 0.5053 * y * y + 0.299 * i * i + 0.1957 * q * q;547}548function rgb2y(r, g, b) { return r * 0.29889531 + g * 0.58662247 + b * 0.11448223; }549function rgb2i(r, g, b) { return r * 0.59597799 - g * 0.27417610 - b * 0.32180189; }550function rgb2q(r, g, b) { return r * 0.21147017 - g * 0.52261711 + b * 0.31114694; }551// blend semi-transparent color with white552function blend(c, a) {553 return 255 + (c - 255) * a;554}555function drawPixel(output, pos, r, g, b) {556 output[pos + 0] = r;557 output[pos + 1] = g;558 output[pos + 2] = b;559 output[pos + 3] = 255;560}561function drawGrayPixel(img, i, alpha, output) {562 const r = img[i + 0];563 const g = img[i + 1];564 const b = img[i + 2];565 const val = blend(rgb2y(r, g, b), alpha * img[i + 3] / 255);566 drawPixel(output, i, val, val, val);567}568/******************************************************************/569/************* PIXELMATCH SOURCE CODE ENDS HERE ******************/...
image.js
Source:image.js
...276 if (a32[i] !== b32[i]) { identical = false; break; }277 }278 if (identical) { // fast path if identical279 if (output && !options.diffMask) {280 for (let i = 0; i < len; i++) drawGrayPixel(img1, 4 * i, options.alpha, output);281 }282 return 0;283 }284 // maximum acceptable square distance between two colors;285 // 35215 is the maximum possible value for the YIQ difference metric286 const maxDelta = 35215 * options.threshold * options.threshold;287 let diff = 0;288 // compare each pixel of one image against the other one289 for (let y = 0; y < height; y++) {290 for (let x = 0; x < width; x++) {291 const pos = (y * width + x) * 4;292 // squared YUV distance between colors at this pixel position, negative if the img2 pixel is darker293 const delta = colorDelta(img1, img2, pos, pos);294 // the color difference is above the threshold295 if (Math.abs(delta) > maxDelta) {296 // check it's a real rendering difference or just anti-aliasing297 if (!options.includeAA && (antialiased(img1, x, y, width, height, img2) ||298 antialiased(img2, x, y, width, height, img1))) {299 // one of the pixels is anti-aliasing; draw as yellow and do not count as difference300 // note that we do not include such pixels in a mask301 if (output && !options.diffMask) drawPixel(output, pos, ...options.aaColor);302 } else {303 // found substantial difference not caused by anti-aliasing; draw it as such304 if (output) {305 drawPixel(output, pos, ...(delta < 0 && options.diffColorAlt || options.diffColor));306 }307 diff++;308 }309 } else if (output) {310 // pixels are similar; draw background as grayscale image blended with white311 if (!options.diffMask) drawGrayPixel(img1, pos, options.alpha, output);312 }313 }314 }315 // return the number of different pixels316 return diff;317}318function isPixelData(arr) {319 // work around instanceof Uint8Array not working properly in some Jest environments320 return ArrayBuffer.isView(arr) && arr.constructor.BYTES_PER_ELEMENT === 1;321}322// check if a pixel is likely a part of anti-aliasing;323// based on "Anti-aliased Pixel and Intensity Slope Detector" paper by V. Vysniauskas, 2009324function antialiased(img, x1, y1, width, height, img2) {325 const x0 = Math.max(x1 - 1, 0);326 const y0 = Math.max(y1 - 1, 0);327 const x2 = Math.min(x1 + 1, width - 1);328 const y2 = Math.min(y1 + 1, height - 1);329 const pos = (y1 * width + x1) * 4;330 let zeroes = x1 === x0 || x1 === x2 || y1 === y0 || y1 === y2 ? 1 : 0;331 let min = 0;332 let max = 0;333 let minX, minY, maxX, maxY;334 // go through 8 adjacent pixels335 for (let x = x0; x <= x2; x++) {336 for (let y = y0; y <= y2; y++) {337 if (x === x1 && y === y1) continue;338 // brightness delta between the center pixel and adjacent one339 const delta = colorDelta(img, img, pos, (y * width + x) * 4, true);340 // count the number of equal, darker and brighter adjacent pixels341 if (delta === 0) {342 zeroes++;343 // if found more than 2 equal siblings, it's definitely not anti-aliasing344 if (zeroes > 2) return false;345 // remember the darkest pixel346 } else if (delta < min) {347 min = delta;348 minX = x;349 minY = y;350 // remember the brightest pixel351 } else if (delta > max) {352 max = delta;353 maxX = x;354 maxY = y;355 }356 }357 }358 // if there are no both darker and brighter pixels among siblings, it's not anti-aliasing359 if (min === 0 || max === 0) return false;360 // if either the darkest or the brightest pixel has 3+ equal siblings in both images361 // (definitely not anti-aliased), this pixel is anti-aliased362 return (hasManySiblings(img, minX, minY, width, height) && hasManySiblings(img2, minX, minY, width, height)) ||363 (hasManySiblings(img, maxX, maxY, width, height) && hasManySiblings(img2, maxX, maxY, width, height));364}365// check if a pixel has 3+ adjacent pixels of the same color.366function hasManySiblings(img, x1, y1, width, height) {367 const x0 = Math.max(x1 - 1, 0);368 const y0 = Math.max(y1 - 1, 0);369 const x2 = Math.min(x1 + 1, width - 1);370 const y2 = Math.min(y1 + 1, height - 1);371 const pos = (y1 * width + x1) * 4;372 let zeroes = x1 === x0 || x1 === x2 || y1 === y0 || y1 === y2 ? 1 : 0;373 // go through 8 adjacent pixels374 for (let x = x0; x <= x2; x++) {375 for (let y = y0; y <= y2; y++) {376 if (x === x1 && y === y1) continue;377 const pos2 = (y * width + x) * 4;378 if (img[pos] === img[pos2] &&379 img[pos + 1] === img[pos2 + 1] &&380 img[pos + 2] === img[pos2 + 2] &&381 img[pos + 3] === img[pos2 + 3]) zeroes++;382 if (zeroes > 2) return true;383 }384 }385 return false;386}387// calculate color difference according to the paper "Measuring perceived color difference388// using YIQ NTSC transmission color space in mobile applications" by Y. Kotsarenko and F. Ramos389function colorDelta(img1, img2, k, m, yOnly) {390 let r1 = img1[k + 0];391 let g1 = img1[k + 1];392 let b1 = img1[k + 2];393 let a1 = img1[k + 3];394 let r2 = img2[m + 0];395 let g2 = img2[m + 1];396 let b2 = img2[m + 2];397 let a2 = img2[m + 3];398 if (a1 === a2 && r1 === r2 && g1 === g2 && b1 === b2) return 0;399 if (a1 < 255) {400 a1 /= 255;401 r1 = blend(r1, a1);402 g1 = blend(g1, a1);403 b1 = blend(b1, a1);404 }405 if (a2 < 255) {406 a2 /= 255;407 r2 = blend(r2, a2);408 g2 = blend(g2, a2);409 b2 = blend(b2, a2);410 }411 const y1 = rgb2y(r1, g1, b1);412 const y2 = rgb2y(r2, g2, b2);413 const y = y1 - y2;414 if (yOnly) return y; // brightness difference only415 const i = rgb2i(r1, g1, b1) - rgb2i(r2, g2, b2);416 const q = rgb2q(r1, g1, b1) - rgb2q(r2, g2, b2);417 const delta = 0.5053 * y * y + 0.299 * i * i + 0.1957 * q * q;418 // encode whether the pixel lightens or darkens in the sign419 return y1 > y2 ? -delta : delta;420}421function rgb2y(r, g, b) { return r * 0.29889531 + g * 0.58662247 + b * 0.11448223; }422function rgb2i(r, g, b) { return r * 0.59597799 - g * 0.27417610 - b * 0.32180189; }423function rgb2q(r, g, b) { return r * 0.21147017 - g * 0.52261711 + b * 0.31114694; }424// blend semi-transparent color with white425function blend(c, a) {426 return 255 + (c - 255) * a;427}428function drawPixel(output, pos, r, g, b) {429 output[pos + 0] = r;430 output[pos + 1] = g;431 output[pos + 2] = b;432 output[pos + 3] = 255;433}434function drawGrayPixel(img, i, alpha, output) {435 const r = img[i + 0];436 const g = img[i + 1];437 const b = img[i + 2];438 const val = blend(rgb2y(r, g, b), alpha * img[i + 3] / 255);439 drawPixel(output, i, val, val, val);440}441function resizeCanvasImage(canvas, img, max_width, max_height) {442 if (!canvas) {443 return444 }445 var width = canvas.width;446 var height = canvas.height;447 if (width > height) {448 if (width > max_width) {...
pixelmatch.js
Source:pixelmatch.js
...51 for (let i = 0; i < len; i++) {52 if (a32[i] !== b32[i]) { identical = false; break; }53 }54 if (identical) { // fast path if identical55 for (let i = 0; i < len; i++) drawGrayPixel(img1, 4 * i, options.alpha, output);56 return 0;57 }58 // maximum acceptable square distance between two colors;59 // 35215 is the maximum possible value for the YIQ difference metric60 const threshold2 = options.threshold * options.threshold;61 const maxDelta = 35215 * threshold2;62 let diff = 0;63 const [aaR, aaG, aaB] = options.aaColor;64 const [diffR, diffG, diffB] = options.diffColor;65 // let deltas = []66 // compare each pixel of one image against the other one67 for (let y = 0; y < height; y++) {68 for (let x = 0; x < width; x++) {69 const pos = (y * width + x) * 4;70 // squared YUV distance between colors at this pixel position71 let distance = colorDelta(img1, img2, pos, pos)72 let delta = 1 - (distance / 35215 / threshold2);73 // for display, we offer scaling74 let scaled_delta = Math.max(0, Math.min(1, delta));75 // deltas.push(scaled_delta)76 if (options.colorScale) {77 if (scaled_delta > 0.95)78 drawGrayPixel(img1, pos, options.alpha, output)79 else {80 let is_antialiased = antialiased(img1, x, y, width, height, img2) || antialiased(img2, x, y, width, height, img1);81 if (!options.includeAA && is_antialiased) {82 drawPixel(output, pos, aaR, aaG, aaB);83 } else {84 let color = rgb(interpolateInferno(scaled_delta))85 drawPixel(output, pos, color.r, color.g, color.b); 86 }87 }88 continue89 }90 // the color difference is above the threshold91 if (delta > maxDelta) {92 // check it's a real rendering difference or just anti-aliasing93 if (!options.includeAA && (antialiased(img1, x, y, width, height, img2) ||94 antialiased(img2, x, y, width, height, img1))) {95 // one of the pixels is anti-aliasing; draw as yellow and do not count as difference96 drawPixel(output, pos, aaR, aaG, aaB);97 } else {98 // found substantial difference not caused by anti-aliasing; draw it as red99 drawPixel(output, pos, diffR, diffG, diffB);100 diff++;101 }102 } else {103 // pixels are similar; draw background as grayscale image blended with white104 drawGrayPixel(img1, pos, options.alpha, output);105 }106 }107 }108 // console.log(deltas)109 // console.log("min:", deltas.reduce((a, b) => Math.min(a,b), 10))110 // console.log("max:", deltas.reduce((a, b) => Math.max(a,b), -10))111 // return the number of different pixels112 return diff;113}114function isPixelData(arr) {115 // work around instanceof Uint8Array not working properly in some Jest environments116 return ArrayBuffer.isView(arr) && arr.constructor.BYTES_PER_ELEMENT === 1;117}118// check if a pixel is likely a part of anti-aliasing;119// based on "Anti-aliased Pixel and Intensity Slope Detector" paper by V. Vysniauskas, 2009120function antialiased(img, x1, y1, width, height, img2) {121 const x0 = Math.max(x1 - 1, 0);122 const y0 = Math.max(y1 - 1, 0);123 const x2 = Math.min(x1 + 1, width - 1);124 const y2 = Math.min(y1 + 1, height - 1);125 const pos = (y1 * width + x1) * 4;126 let zeroes = x1 === x0 || x1 === x2 || y1 === y0 || y1 === y2 ? 1 : 0;127 let min = 0;128 let max = 0;129 let minX, minY, maxX, maxY;130 // go through 8 adjacent pixels131 for (let x = x0; x <= x2; x++) {132 for (let y = y0; y <= y2; y++) {133 if (x === x1 && y === y1) continue;134 // brightness delta between the center pixel and adjacent one135 const delta = colorDelta(img, img, pos, (y * width + x) * 4, true);136 // count the number of equal, darker and brighter adjacent pixels137 if (delta === 0) {138 zeroes++;139 // if found more than 2 equal siblings, it's definitely not anti-aliasing140 if (zeroes > 2) return false;141 // remember the darkest pixel142 } else if (delta < min) {143 min = delta;144 minX = x;145 minY = y;146 // remember the brightest pixel147 } else if (delta > max) {148 max = delta;149 maxX = x;150 maxY = y;151 }152 }153 }154 // if there are no both darker and brighter pixels among siblings, it's not anti-aliasing155 if (min === 0 || max === 0) return false;156 // if either the darkest or the brightest pixel has 3+ equal siblings in both images157 // (definitely not anti-aliased), this pixel is anti-aliased158 return (hasManySiblings(img, minX, minY, width, height) && hasManySiblings(img2, minX, minY, width, height)) ||159 (hasManySiblings(img, maxX, maxY, width, height) && hasManySiblings(img2, maxX, maxY, width, height));160}161// check if a pixel has 3+ adjacent pixels of the same color.162function hasManySiblings(img, x1, y1, width, height) {163 const x0 = Math.max(x1 - 1, 0);164 const y0 = Math.max(y1 - 1, 0);165 const x2 = Math.min(x1 + 1, width - 1);166 const y2 = Math.min(y1 + 1, height - 1);167 const pos = (y1 * width + x1) * 4;168 let zeroes = x1 === x0 || x1 === x2 || y1 === y0 || y1 === y2 ? 1 : 0;169 // go through 8 adjacent pixels170 for (let x = x0; x <= x2; x++) {171 for (let y = y0; y <= y2; y++) {172 if (x === x1 && y === y1) continue;173 const pos2 = (y * width + x) * 4;174 if (img[pos] === img[pos2] &&175 img[pos + 1] === img[pos2 + 1] &&176 img[pos + 2] === img[pos2 + 2] &&177 img[pos + 3] === img[pos2 + 3]) zeroes++;178 if (zeroes > 2) return true;179 }180 }181 return false;182}183// calculate color difference according to the paper "Measuring perceived color difference184// using YIQ NTSC transmission color space in mobile applications" by Y. Kotsarenko and F. Ramos185function colorDelta(img1, img2, k, m, yOnly) {186 let r1 = img1[k + 0];187 let g1 = img1[k + 1];188 let b1 = img1[k + 2];189 let a1 = img1[k + 3];190 let r2 = img2[m + 0];191 let g2 = img2[m + 1];192 let b2 = img2[m + 2];193 let a2 = img2[m + 3];194 if (a1 === a2 && r1 === r2 && g1 === g2 && b1 === b2) return 0;195 if (a1 < 255) {196 a1 /= 255;197 r1 = blend(r1, a1);198 g1 = blend(g1, a1);199 b1 = blend(b1, a1);200 }201 if (a2 < 255) {202 a2 /= 255;203 r2 = blend(r2, a2);204 g2 = blend(g2, a2);205 b2 = blend(b2, a2);206 }207 const y = rgb2y(r1, g1, b1) - rgb2y(r2, g2, b2);208 if (yOnly) return y; // brightness difference only209 const i = rgb2i(r1, g1, b1) - rgb2i(r2, g2, b2);210 const q = rgb2q(r1, g1, b1) - rgb2q(r2, g2, b2);211 return 0.5053 * y * y + 0.299 * i * i + 0.1957 * q * q;212}213function rgb2y(r, g, b) { return r * 0.29889531 + g * 0.58662247 + b * 0.11448223; }214function rgb2i(r, g, b) { return r * 0.59597799 - g * 0.27417610 - b * 0.32180189; }215function rgb2q(r, g, b) { return r * 0.21147017 - g * 0.52261711 + b * 0.31114694; }216// blend semi-transparent color with white217function blend(c, a) {218 return 255 + (c - 255) * a;219}220function drawPixel(output, pos, r, g, b) {221 output[pos + 0] = r;222 output[pos + 1] = g;223 output[pos + 2] = b;224 output[pos + 3] = 255;225}226function drawGrayPixel(img, pos, alpha, output) {227 const r = img[pos + 0];228 const g = img[pos + 1];229 const b = img[pos + 2];230 const y = rgb2y(r, g, b)231 const val = blend(y, alpha * img[pos + 3] / 255);232 drawPixel(output, pos, val, val, val);233}234// function drawAlphaPixel(output, pos, r, g, b, alpha) {235// const r = img[pos + 0];236// const g = img[pos + 1];237// const b = img[pos + 2];238// const y = rgb2y(r, g, b)239// }240export default pixelmatch;
pixelmatch.mjs
Source:pixelmatch.mjs
...43 if (a32[i] !== b32[i]) { identical = false; break; }44 }45 if (identical) { // fast path if identical46 if (output && !options.diffMask) {47 for (let i = 0; i < len; i++) drawGrayPixel(img1, 4 * i, options.alpha, output);48 }49 return 0;50 }51 // maximum acceptable square distance between two colors;52 // 35215 is the maximum possible value for the YIQ difference metric53 const maxDelta = 35215 * options.threshold * options.threshold;54 let diff = 0;55 // compare each pixel of one image against the other one56 for (let y = 0; y < height; y++) {57 for (let x = 0; x < width; x++) {58 const pos = (y * width + x) * 4;59 // squared YUV distance between colors at this pixel position, negative if the img2 pixel is darker60 const delta = colorDelta(img1, img2, pos, pos);61 // the color difference is above the threshold62 if (Math.abs(delta) > maxDelta) {63 // check it's a real rendering difference or just anti-aliasing64 if (!options.includeAA && (antialiased(img1, x, y, width, height, img2) ||65 antialiased(img2, x, y, width, height, img1))) {66 // one of the pixels is anti-aliasing; draw as yellow and do not count as difference67 // note that we do not include such pixels in a mask68 if (output && !options.diffMask) drawPixel(output, pos, ...options.aaColor);69 } else {70 // found substantial difference not caused by anti-aliasing; draw it as such71 if (output) {72 drawPixel(output, pos, ...(delta < 0 && options.diffColorAlt || options.diffColor));73 }74 diff++;75 }76 } else if (output) {77 // pixels are similar; draw background as grayscale image blended with white78 if (!options.diffMask) drawGrayPixel(img1, pos, options.alpha, output);79 }80 }81 }82 // return the number of different pixels83 return diff;84}85function isPixelData(arr) {86 // work around instanceof Uint8Array not working properly in some Jest environments87 return ArrayBuffer.isView(arr) && arr.constructor.BYTES_PER_ELEMENT === 1;88}89// check if a pixel is likely a part of anti-aliasing;90// based on "Anti-aliased Pixel and Intensity Slope Detector" paper by V. Vysniauskas, 200991function antialiased(img, x1, y1, width, height, img2) {92 const x0 = Math.max(x1 - 1, 0);93 const y0 = Math.max(y1 - 1, 0);94 const x2 = Math.min(x1 + 1, width - 1);95 const y2 = Math.min(y1 + 1, height - 1);96 const pos = (y1 * width + x1) * 4;97 let zeroes = x1 === x0 || x1 === x2 || y1 === y0 || y1 === y2 ? 1 : 0;98 let min = 0;99 let max = 0;100 let minX, minY, maxX, maxY;101 // go through 8 adjacent pixels102 for (let x = x0; x <= x2; x++) {103 for (let y = y0; y <= y2; y++) {104 if (x === x1 && y === y1) continue;105 // brightness delta between the center pixel and adjacent one106 const delta = colorDelta(img, img, pos, (y * width + x) * 4, true);107 // count the number of equal, darker and brighter adjacent pixels108 if (delta === 0) {109 zeroes++;110 // if found more than 2 equal siblings, it's definitely not anti-aliasing111 if (zeroes > 2) return false;112 // remember the darkest pixel113 } else if (delta < min) {114 min = delta;115 minX = x;116 minY = y;117 // remember the brightest pixel118 } else if (delta > max) {119 max = delta;120 maxX = x;121 maxY = y;122 }123 }124 }125 // if there are no both darker and brighter pixels among siblings, it's not anti-aliasing126 if (min === 0 || max === 0) return false;127 // if either the darkest or the brightest pixel has 3+ equal siblings in both images128 // (definitely not anti-aliased), this pixel is anti-aliased129 return (hasManySiblings(img, minX, minY, width, height) && hasManySiblings(img2, minX, minY, width, height)) ||130 (hasManySiblings(img, maxX, maxY, width, height) && hasManySiblings(img2, maxX, maxY, width, height));131}132// check if a pixel has 3+ adjacent pixels of the same color.133function hasManySiblings(img, x1, y1, width, height) {134 const x0 = Math.max(x1 - 1, 0);135 const y0 = Math.max(y1 - 1, 0);136 const x2 = Math.min(x1 + 1, width - 1);137 const y2 = Math.min(y1 + 1, height - 1);138 const pos = (y1 * width + x1) * 4;139 let zeroes = x1 === x0 || x1 === x2 || y1 === y0 || y1 === y2 ? 1 : 0;140 // go through 8 adjacent pixels141 for (let x = x0; x <= x2; x++) {142 for (let y = y0; y <= y2; y++) {143 if (x === x1 && y === y1) continue;144 const pos2 = (y * width + x) * 4;145 if (img[pos] === img[pos2] &&146 img[pos + 1] === img[pos2 + 1] &&147 img[pos + 2] === img[pos2 + 2] &&148 img[pos + 3] === img[pos2 + 3]) zeroes++;149 if (zeroes > 2) return true;150 }151 }152 return false;153}154// calculate color difference according to the paper "Measuring perceived color difference155// using YIQ NTSC transmission color space in mobile applications" by Y. Kotsarenko and F. Ramos156function colorDelta(img1, img2, k, m, yOnly) {157 let r1 = img1[k + 0];158 let g1 = img1[k + 1];159 let b1 = img1[k + 2];160 let a1 = img1[k + 3];161 let r2 = img2[m + 0];162 let g2 = img2[m + 1];163 let b2 = img2[m + 2];164 let a2 = img2[m + 3];165 if (a1 === a2 && r1 === r2 && g1 === g2 && b1 === b2) return 0;166 if (a1 < 255) {167 a1 /= 255;168 r1 = blend(r1, a1);169 g1 = blend(g1, a1);170 b1 = blend(b1, a1);171 }172 if (a2 < 255) {173 a2 /= 255;174 r2 = blend(r2, a2);175 g2 = blend(g2, a2);176 b2 = blend(b2, a2);177 }178 const y1 = rgb2y(r1, g1, b1);179 const y2 = rgb2y(r2, g2, b2);180 const y = y1 - y2;181 if (yOnly) return y; // brightness difference only182 const i = rgb2i(r1, g1, b1) - rgb2i(r2, g2, b2);183 const q = rgb2q(r1, g1, b1) - rgb2q(r2, g2, b2);184 const delta = 0.5053 * y * y + 0.299 * i * i + 0.1957 * q * q;185 // encode whether the pixel lightens or darkens in the sign186 return y1 > y2 ? -delta : delta;187}188function rgb2y(r, g, b) { return r * 0.29889531 + g * 0.58662247 + b * 0.11448223; }189function rgb2i(r, g, b) { return r * 0.59597799 - g * 0.27417610 - b * 0.32180189; }190function rgb2q(r, g, b) { return r * 0.21147017 - g * 0.52261711 + b * 0.31114694; }191// blend semi-transparent color with white192function blend(c, a) {193 return 255 + (c - 255) * a;194}195function drawPixel(output, pos, r, g, b) {196 output[pos + 0] = r;197 output[pos + 1] = g;198 output[pos + 2] = b;199 output[pos + 3] = 255;200}201function drawGrayPixel(img, i, alpha, output) {202 const r = img[i + 0];203 const g = img[i + 1];204 const b = img[i + 2];205 const val = blend(rgb2y(r, g, b), alpha * img[i + 3] / 255);206 drawPixel(output, i, val, val, val);...
ImgDiffUtil.js
Source:ImgDiffUtil.js
...25 if (a32[i] !== b32[i]) { identical = false; break; }26 }27 if (identical) { // fast path if identical28 if (output && !options.diffMask) {29 for (let i = 0; i < len; i++) ImgDiffUtil.drawGrayPixel(img1, 4 * i, options.alpha, output);30 }31 return 0;32 }33 // maximum acceptable square distance between two colors;34 // 35215 is the maximum possible value for the YIQ difference metric35 const maxDelta = 35215 * options.threshold * options.threshold;36 let diff = 0;37 // compare each pixel of one image against the other one38 for (let y = 0; y < height; y++) {39 for (let x = 0; x < width; x++) {40 const pos = (y * width + x) * 4;41 // squared YUV distance between colors at this pixel position, negative if the img2 pixel is darker42 const delta = ImgDiffUtil.colorDelta(img1, img2, pos, pos);43 // the color difference is above the threshold44 if (Math.abs(delta) > maxDelta) {45 // check it's a real rendering difference or just anti-aliasing46 if (!options.includeAA && (ImgDiffUtil.antialiased(img1, x, y, width, height, img2) ||47 ImgDiffUtil.antialiased(img2, x, y, width, height, img1))) {48 // one of the pixels is anti-aliasing; draw as yellow and do not count as difference49 // note that we do not include such pixels in a mask50 if (output && !options.diffMask) ImgDiffUtil.drawPixel(output, pos, ...options.aaColor);51 } else {52 // found substantial difference not caused by anti-aliasing; draw it as such53 if (output) {54 ImgDiffUtil.drawPixel(output, pos, ...(delta < 0 && options.diffColorAlt || options.diffColor));55 }56 diff++;57 }58 } else if (output) {59 // pixels are similar; draw background as grayscale image blended with white60 if (!options.diffMask) ImgDiffUtil.drawGrayPixel(img1, pos, options.alpha, output);61 }62 }63 }64 // return the number of different pixels65 return diff;66 },67 isPixelData: function (arr) {68 // work around instanceof Uint8Array not working properly in some Jest environments69 return ArrayBuffer.isView(arr) && arr.constructor.BYTES_PER_ELEMENT === 1;70 },71// check if a pixel is likely a part of anti-aliasing;72// based on "Anti-aliased Pixel and Intensity Slope Detector" paper by V. Vysniauskas, 200973 antialiased: function (img, x1, y1, width, height, img2) {74 const x0 = Math.max(x1 - 1, 0);...
index.js
Source:index.js
...25 if (a32[i] !== b32[i]) { identical = false; break; }26 }27 if (identical) { // fast path if identical28 if (output && !options.diffMask) {29 for (let i = 0; i < len; i++) drawGrayPixel(img1, 4 * i, options.alpha, output);30 }31 return 0;32 }33 // maximum acceptable square distance between two colors;34 // 35215 is the maximum possible value for the YIQ difference metric35 const maxDelta = 35215 * options.threshold * options.threshold;36 let diff = 0;37 // compare each pixel of one image against the other one38 for (let y = 0; y < height; y++) {39 for (let x = 0; x < width; x++) {40 const pos = (y * width + x) * 4;41 // squared YUV distance between colors at this pixel position, negative if the img2 pixel is darker42 const delta = colorDelta(img1, img2, pos, pos);43 // the color difference is above the threshold44 if (Math.abs(delta) > maxDelta) {45 // check it's a real rendering difference or just anti-aliasing46 if (!options.includeAA && (antialiased(img1, x, y, width, height, img2) ||47 antialiased(img2, x, y, width, height, img1))) {48 // one of the pixels is anti-aliasing; draw as yellow and do not count as difference49 // note that we do not include such pixels in a mask50 if (output && !options.diffMask) drawPixel(output, pos, ...options.aaColor);51 } else {52 // found substantial difference not caused by anti-aliasing; draw it as such53 if (output) {54 drawPixel(output, pos, ...(delta < 0 && options.diffColorAlt || options.diffColor));55 }56 diff++;57 }58 } else if (output) {59 // pixels are similar; draw background as grayscale image blended with white60 if (!options.diffMask) drawGrayPixel(img1, pos, options.alpha, output);61 }62 }63 }64 // return the number of different pixels65 return diff;66}67function isPixelData(arr) {68 // work around instanceof Uint8Array not working properly in some Jest environments69 return ArrayBuffer.isView(arr) && arr.constructor.BYTES_PER_ELEMENT === 1;70}71// check if a pixel is likely a part of anti-aliasing;72// based on "Anti-aliased Pixel and Intensity Slope Detector" paper by V. Vysniauskas, 200973function antialiased(img, x1, y1, width, height, img2) {74 const x0 = Math.max(x1 - 1, 0);75 const y0 = Math.max(y1 - 1, 0);76 const x2 = Math.min(x1 + 1, width - 1);77 const y2 = Math.min(y1 + 1, height - 1);78 const pos = (y1 * width + x1) * 4;79 let zeroes = x1 === x0 || x1 === x2 || y1 === y0 || y1 === y2 ? 1 : 0;80 let min = 0;81 let max = 0;82 let minX, minY, maxX, maxY;83 // go through 8 adjacent pixels84 for (let x = x0; x <= x2; x++) {85 for (let y = y0; y <= y2; y++) {86 if (x === x1 && y === y1) continue;87 // brightness delta between the center pixel and adjacent one88 const delta = colorDelta(img, img, pos, (y * width + x) * 4, true);89 // count the number of equal, darker and brighter adjacent pixels90 if (delta === 0) {91 zeroes++;92 // if found more than 2 equal siblings, it's definitely not anti-aliasing93 if (zeroes > 2) return false;94 // remember the darkest pixel95 } else if (delta < min) {96 min = delta;97 minX = x;98 minY = y;99 // remember the brightest pixel100 } else if (delta > max) {101 max = delta;102 maxX = x;103 maxY = y;104 }105 }106 }107 // if there are no both darker and brighter pixels among siblings, it's not anti-aliasing108 if (min === 0 || max === 0) return false;109 // if either the darkest or the brightest pixel has 3+ equal siblings in both images110 // (definitely not anti-aliased), this pixel is anti-aliased111 return (hasManySiblings(img, minX, minY, width, height) && hasManySiblings(img2, minX, minY, width, height)) ||112 (hasManySiblings(img, maxX, maxY, width, height) && hasManySiblings(img2, maxX, maxY, width, height));113}114// check if a pixel has 3+ adjacent pixels of the same color.115function hasManySiblings(img, x1, y1, width, height) {116 const x0 = Math.max(x1 - 1, 0);117 const y0 = Math.max(y1 - 1, 0);118 const x2 = Math.min(x1 + 1, width - 1);119 const y2 = Math.min(y1 + 1, height - 1);120 const pos = (y1 * width + x1) * 4;121 let zeroes = x1 === x0 || x1 === x2 || y1 === y0 || y1 === y2 ? 1 : 0;122 // go through 8 adjacent pixels123 for (let x = x0; x <= x2; x++) {124 for (let y = y0; y <= y2; y++) {125 if (x === x1 && y === y1) continue;126 const pos2 = (y * width + x) * 4;127 if (img[pos] === img[pos2] &&128 img[pos + 1] === img[pos2 + 1] &&129 img[pos + 2] === img[pos2 + 2] &&130 img[pos + 3] === img[pos2 + 3]) zeroes++;131 if (zeroes > 2) return true;132 }133 }134 return false;135}136// calculate color difference according to the paper "Measuring perceived color difference137// using YIQ NTSC transmission color space in mobile applications" by Y. Kotsarenko and F. Ramos138function colorDelta(img1, img2, k, m, yOnly) {139 let r1 = img1[k + 0];140 let g1 = img1[k + 1];141 let b1 = img1[k + 2];142 let a1 = img1[k + 3];143 let r2 = img2[m + 0];144 let g2 = img2[m + 1];145 let b2 = img2[m + 2];146 let a2 = img2[m + 3];147 if (a1 === a2 && r1 === r2 && g1 === g2 && b1 === b2) return 0;148 if (a1 < 255) {149 a1 /= 255;150 r1 = blend(r1, a1);151 g1 = blend(g1, a1);152 b1 = blend(b1, a1);153 }154 if (a2 < 255) {155 a2 /= 255;156 r2 = blend(r2, a2);157 g2 = blend(g2, a2);158 b2 = blend(b2, a2);159 }160 const y1 = rgb2y(r1, g1, b1);161 const y2 = rgb2y(r2, g2, b2);162 const y = y1 - y2;163 if (yOnly) return y; // brightness difference only164 const i = rgb2i(r1, g1, b1) - rgb2i(r2, g2, b2);165 const q = rgb2q(r1, g1, b1) - rgb2q(r2, g2, b2);166 const delta = 0.5053 * y * y + 0.299 * i * i + 0.1957 * q * q;167 // encode whether the pixel lightens or darkens in the sign168 return y1 > y2 ? -delta : delta;169}170function rgb2y(r, g, b) { return r * 0.29889531 + g * 0.58662247 + b * 0.11448223; }171function rgb2i(r, g, b) { return r * 0.59597799 - g * 0.27417610 - b * 0.32180189; }172function rgb2q(r, g, b) { return r * 0.21147017 - g * 0.52261711 + b * 0.31114694; }173// blend semi-transparent color with white174function blend(c, a) {175 return 255 + (c - 255) * a;176}177function drawPixel(output, pos, r, g, b) {178 output[pos + 0] = r;179 output[pos + 1] = g;180 output[pos + 2] = b;181 output[pos + 3] = 255;182}183function drawGrayPixel(img, i, alpha, output) {184 const r = img[i + 0];185 const g = img[i + 1];186 const b = img[i + 2];187 const val = blend(rgb2y(r, g, b), alpha * img[i + 3] / 255);188 drawPixel(output, i, val, val, val);...
pixelmatch-5.2.0.js
Source:pixelmatch-5.2.0.js
...25 if (a32[i] !== b32[i]) { identical = false; break; }26 }27 if (identical) { // fast path if identical28 if (output && !options.diffMask) {29 for (let i = 0; i < len; i++) drawGrayPixel(img1, 4 * i, options.alpha, output);30 }31 return 0;32 }33 // maximum acceptable square distance between two colors;34 // 35215 is the maximum possible value for the YIQ difference metric35 const maxDelta = 35215 * options.threshold * options.threshold;36 let diff = 0;37 // compare each pixel of one image against the other one38 for (let y = 0; y < height; y++) {39 for (let x = 0; x < width; x++) {40 const pos = (y * width + x) * 4;41 // squared YUV distance between colors at this pixel position, negative if the img2 pixel is darker42 const delta = colorDelta(img1, img2, pos, pos);43 // the color difference is above the threshold44 if (Math.abs(delta) > maxDelta) {45 // check it's a real rendering difference or just anti-aliasing46 if (!options.includeAA && (antialiased(img1, x, y, width, height, img2) ||47 antialiased(img2, x, y, width, height, img1))) {48 // one of the pixels is anti-aliasing; draw as yellow and do not count as difference49 // note that we do not include such pixels in a mask50 if (output && !options.diffMask) drawPixel(output, pos, ...options.aaColor);51 } else {52 // found substantial difference not caused by anti-aliasing; draw it as such53 if (output) {54 drawPixel(output, pos, ...(delta < 0 && options.diffColorAlt || options.diffColor));55 }56 diff++;57 }58 } else if (output) {59 // pixels are similar; draw background as grayscale image blended with white60 if (!options.diffMask) drawGrayPixel(img1, pos, options.alpha, output);61 }62 }63 }64 // return the number of different pixels65 return diff;66}67function isPixelData(arr) {68 // work around instanceof Uint8Array not working properly in some Jest environments69 return ArrayBuffer.isView(arr) && arr.constructor.BYTES_PER_ELEMENT === 1;70}71// check if a pixel is likely a part of anti-aliasing;72// based on "Anti-aliased Pixel and Intensity Slope Detector" paper by V. Vysniauskas, 200973function antialiased(img, x1, y1, width, height, img2) {74 const x0 = Math.max(x1 - 1, 0);75 const y0 = Math.max(y1 - 1, 0);76 const x2 = Math.min(x1 + 1, width - 1);77 const y2 = Math.min(y1 + 1, height - 1);78 const pos = (y1 * width + x1) * 4;79 let zeroes = x1 === x0 || x1 === x2 || y1 === y0 || y1 === y2 ? 1 : 0;80 let min = 0;81 let max = 0;82 let minX, minY, maxX, maxY;83 // go through 8 adjacent pixels84 for (let x = x0; x <= x2; x++) {85 for (let y = y0; y <= y2; y++) {86 if (x === x1 && y === y1) continue;87 // brightness delta between the center pixel and adjacent one88 const delta = colorDelta(img, img, pos, (y * width + x) * 4, true);89 // count the number of equal, darker and brighter adjacent pixels90 if (delta === 0) {91 zeroes++;92 // if found more than 2 equal siblings, it's definitely not anti-aliasing93 if (zeroes > 2) return false;94 // remember the darkest pixel95 } else if (delta < min) {96 min = delta;97 minX = x;98 minY = y;99 // remember the brightest pixel100 } else if (delta > max) {101 max = delta;102 maxX = x;103 maxY = y;104 }105 }106 }107 // if there are no both darker and brighter pixels among siblings, it's not anti-aliasing108 if (min === 0 || max === 0) return false;109 // if either the darkest or the brightest pixel has 3+ equal siblings in both images110 // (definitely not anti-aliased), this pixel is anti-aliased111 return (hasManySiblings(img, minX, minY, width, height) && hasManySiblings(img2, minX, minY, width, height)) ||112 (hasManySiblings(img, maxX, maxY, width, height) && hasManySiblings(img2, maxX, maxY, width, height));113}114// check if a pixel has 3+ adjacent pixels of the same color.115function hasManySiblings(img, x1, y1, width, height) {116 const x0 = Math.max(x1 - 1, 0);117 const y0 = Math.max(y1 - 1, 0);118 const x2 = Math.min(x1 + 1, width - 1);119 const y2 = Math.min(y1 + 1, height - 1);120 const pos = (y1 * width + x1) * 4;121 let zeroes = x1 === x0 || x1 === x2 || y1 === y0 || y1 === y2 ? 1 : 0;122 // go through 8 adjacent pixels123 for (let x = x0; x <= x2; x++) {124 for (let y = y0; y <= y2; y++) {125 if (x === x1 && y === y1) continue;126 const pos2 = (y * width + x) * 4;127 if (img[pos] === img[pos2] &&128 img[pos + 1] === img[pos2 + 1] &&129 img[pos + 2] === img[pos2 + 2] &&130 img[pos + 3] === img[pos2 + 3]) zeroes++;131 if (zeroes > 2) return true;132 }133 }134 return false;135}136// calculate color difference according to the paper "Measuring perceived color difference137// using YIQ NTSC transmission color space in mobile applications" by Y. Kotsarenko and F. Ramos138function colorDelta(img1, img2, k, m, yOnly) {139 let r1 = img1[k + 0];140 let g1 = img1[k + 1];141 let b1 = img1[k + 2];142 let a1 = img1[k + 3];143 let r2 = img2[m + 0];144 let g2 = img2[m + 1];145 let b2 = img2[m + 2];146 let a2 = img2[m + 3];147 if (a1 === a2 && r1 === r2 && g1 === g2 && b1 === b2) return 0;148 if (a1 < 255) {149 a1 /= 255;150 r1 = blend(r1, a1);151 g1 = blend(g1, a1);152 b1 = blend(b1, a1);153 }154 if (a2 < 255) {155 a2 /= 255;156 r2 = blend(r2, a2);157 g2 = blend(g2, a2);158 b2 = blend(b2, a2);159 }160 const y1 = rgb2y(r1, g1, b1);161 const y2 = rgb2y(r2, g2, b2);162 const y = y1 - y2;163 if (yOnly) return y; // brightness difference only164 const i = rgb2i(r1, g1, b1) - rgb2i(r2, g2, b2);165 const q = rgb2q(r1, g1, b1) - rgb2q(r2, g2, b2);166 const delta = 0.5053 * y * y + 0.299 * i * i + 0.1957 * q * q;167 // encode whether the pixel lightens or darkens in the sign168 return y1 > y2 ? -delta : delta;169}170function rgb2y(r, g, b) { return r * 0.29889531 + g * 0.58662247 + b * 0.11448223; }171function rgb2i(r, g, b) { return r * 0.59597799 - g * 0.27417610 - b * 0.32180189; }172function rgb2q(r, g, b) { return r * 0.21147017 - g * 0.52261711 + b * 0.31114694; }173// blend semi-transparent color with white174function blend(c, a) {175 return 255 + (c - 255) * a;176}177function drawPixel(output, pos, r, g, b) {178 output[pos + 0] = r;179 output[pos + 1] = g;180 output[pos + 2] = b;181 output[pos + 3] = 255;182}183function drawGrayPixel(img, i, alpha, output) {184 const r = img[i + 0];185 const g = img[i + 1];186 const b = img[i + 2];187 const val = blend(rgb2y(r, g, b), alpha * img[i + 3] / 255);188 drawPixel(output, i, val, val, val);...
Using AI Code Generation
1const { drawGrayPixel } = require('playwright/lib/server/chromium/crPage');2(async () => {3 const browser = await chromium.launch();4 const context = await browser.newContext();5 const page = await context.newPage();6 const rect = await page.evaluate(() => {7 const rect = document.querySelector('#js-link-box-en').getBoundingClientRect();8 return {9 };10 });11 await drawGrayPixel(page, rect.x, rect.y);12 await page.screenshot({ path: 'wikipedia.png' });13 await browser.close();14})();15const { drawGrayPixel } = require('playwright/lib/server/chromium/crPage');16(async () => {17 const browser = await chromium.launch();18 const context = await browser.newContext();19 const page = await context.newPage();20 const rect = await page.evaluate(() => {21 const rect = document.querySelector('#js-link-box-en').getBoundingClientRect();22 return {23 };24 });25 await drawGrayPixel(page, rect.x, rect.y);26 await page.screenshot({ path: 'wikipedia.png' });27 await browser.close();28})();29const { drawGrayPixel } = require('playwright/lib/server/chromium/crPage');30(async () => {31 const browser = await chromium.launch();32 const context = await browser.newContext();33 const page = await context.newPage();34 const rect = await page.evaluate(() => {35 const rect = document.querySelector('#js-link-box-en').getBoundingClientRect();36 return {37 };38 });39 await drawGrayPixel(page, rect.x, rect.y);40 await page.screenshot({ path: 'w
Using AI Code Generation
1const {chromium} = require('playwright');2const {drawGrayPixel} = require('playwright/lib/server/screencast/screencast');3(async () => {4 const browser = await chromium.launch();5 const context = await browser.newContext();6 const page = await context.newPage();7 await page.screenshot({ path: 'example.png' });8 await browser.close();9})();10const { drawGrayPixel } = require('./drawGrayPixel');11class Screencast {12 constructor(page, context, options) {13 this._page = page;14 this._context = context;15 this._options = options;16 this._video = new VideoWriter(options);17 this._pageProxy = page._delegate;18 this._pageProxy.on(PageProxyEvents.ScreencastFrame, this._onScreencastFrame.bind(this));19 this._pageProxy.on(PageProxyEvents.ScreencastVisibilityChanged, this._onScreencastVisibilityChanged.bind(this));20 this._pageProxy.on(PageProxyEvents.Close, () => this.stop());21 this._page.on(Page.Events.Close, () => this.stop());22 this._page.on(Page.Events.Popup, popup => this._onPopup(popup));23 this._page.on(Page.Events.Video, video => this._onVideo(video));24 this._page.on(Page.Events.Console, message => this._onConsoleMessage(message));25 this._page.on(Page.Events.Download, download => this._onDownload(download));26 this._page.on(Page.Events.Request, request => this._onRequest(request));27 this._page.on(Page.Events.Response, response => this._onResponse(response));28 this._page.on(Page.Events.RequestFailed, request => this._onRequestFailed(request));29 this._page.on(Page.Events.RequestFinished, request => this._onRequestFinished(request));30 this._page.on(Page.Events.DOMContentLoaded, () => this._onDOMContentLoaded());31 this._page.on(Page.Events.Load, () => this._onLoad());32 this._page.on(Page.Events.FrameAttached, frame => this._onFrameAttached(frame));33 this._page.on(Page.Events.FrameNavigated, frame => this._onFrameNavigated(frame));34 this._page.on(Page.Events
Using AI Code Generation
1const { drawGrayPixel } = require('playwright-core/lib/server/chromium/crPage');2const { chromium } = require('playwright-core');3(async () => {4 const browser = await chromium.launch();5 const context = await browser.newContext();6 const page = await context.newPage();7 await page.evaluate(() => {8 drawGrayPixel(10, 10, 1, 1, 0.5);9 });10 await page.screenshot({ path: 'example.png' });11 await browser.close();12})();13const { drawGrayPixel } = require('playwright-core/lib/server/chromium/crPage');14const { chromium } = require('playwright-core');15(async () => {16 const browser = await chromium.launch();17 const context = await browser.newContext();18 const page = await context.newPage();19 await page.evaluate(() => {20 drawGrayPixel(10, 10, 1, 1, 0.5);21 });22 await page.screenshot({ path: 'example.png' });23 await browser.close();24})();25const { drawGrayPixel } = require('playwright-core/lib/server/chromium/crPage');26const { chromium } = require('playwright-core');27(async () => {28 const browser = await chromium.launch();29 const context = await browser.newContext();30 const page = await context.newPage();31 await page.evaluate(() => {32 drawGrayPixel(10, 10, 1, 1, 0.5);33 });34 await page.screenshot({ path: 'example.png' });35 await browser.close();36})();
Using AI Code Generation
1const { drawGrayPixel } = require('playwright-core/lib/server/chromium/crBrowser');2const { chromium } = require('playwright-core');3(async () => {4 const browser = await chromium.launch({ headless: false });5 const page = await browser.newPage();6 const context = await page.context();7 const frame = page.mainFrame();8 await drawGrayPixel(context, frame, 10, 10);9 await page.screenshot({ path: 'google.png' });10 await browser.close();11})();
Using AI Code Generation
1const { devices } = require('@playwright/test');2const iPhone = devices['iPhone 11 Pro'];3const drawGrayPixel = async (page, x, y) => {4 await page.evaluate(async (x, y) => {5 const context = window._playwrightInternal.context;6 const canvas = context.canvas;7 const context2d = canvas.getContext('2d');8 context2d.fillStyle = 'gray';9 context2d.fillRect(x, y, 1, 1);10 }, x, y);11};12(async () => {13 const browser = await chromium.launch();14 const context = await browser.newContext({15 viewport: { width: 400, height: 400 },16 });17 const page = await context.newPage();18 await drawGrayPixel(page, 10, 10);19 await page.screenshot({ path: 'example.png' });20 await browser.close();21})();22test.describe('Test', () => {23 test.beforeEach(async ({ page }) => {24 });25 test('should work', async ({ page }) => {26 await drawGrayPixel(page, 10, 10);27 await page.screenshot({ path: 'example.png' });28 });29});
Using AI Code Generation
1const { drawGrayPixel } = require('playwright/lib/server/screencast/screencast');2drawGrayPixel(0, 0, 0, 0, 0);3const { drawGrayPixel } = require('playwright/lib/server/screencast/screencast');4drawGrayPixel(0, 0, 0, 0, 0);5const { drawGrayPixel } = require('playwright/lib/server/screencast/screencast');6drawGrayPixel(0, 0, 0, 0, 0);7const { drawGrayPixel } = require('playwright/lib/server/screencast/screencast');8drawGrayPixel(0, 0, 0, 0, 0);9const { drawGrayPixel } = require('playwright/lib/server/screencast/screencast');10drawGrayPixel(0, 0, 0, 0, 0);11const { drawGrayPixel } = require('playwright/lib/server/screencast/screencast');12drawGrayPixel(0, 0, 0, 0, 0);13const { drawGrayPixel } = require('playwright/lib/server/screencast/screencast');14drawGrayPixel(0, 0, 0, 0, 0);15const { drawGrayPixel } = require('playwright/lib/server/screencast/screencast');16drawGrayPixel(0, 0, 0, 0, 0);17const { drawGrayPixel } = require('playwright/lib/server/screencast/screencast');18drawGrayPixel(0, 0, 0, 0, 0);19const { drawGrayPixel } = require('playwright
Using AI Code Generation
1const { drawGrayPixel } = require('@playwright/test/lib/server/trace/recorder/recorderApp');2drawGrayPixel({ x: 100, y: 100 });3const { test } = require('@playwright/test');4test('draw gray pixel', async ({ page }) => {5 await page.evaluate(() => {6 const { drawGrayPixel } = require('@playwright/test/lib/server/trace/recorder/recorderApp');7 drawGrayPixel({ x: 100, y: 100 });8 });9});
Using AI Code Generation
1await page.evaluate(async (x, y, color) => {2 await window.__playwright__internal__object(drawGrayPixel)(x, y, color);3 }, x, y, color);4await page.evaluate(async (x, y, color) => {5 await window.__playwright__internal__object(drawGreenPixel)(x, y, color);6 }, x, y, color);7await page.evaluate(async (x, y, color) => {8 await window.__playwright__internal__object(drawRedPixel)(x, y, color);9 }, x, y, color);10await page.evaluate(async (x, y, color) => {11 await window.__playwright__internal__object(drawBluePixel)(x, y, color);12 }, x, y, color);13await page.evaluate(async (x, y, color) => {14 await window.__playwright__internal__object(drawYellowPixel)(x, y, color);15 }, x, y, color);16await page.evaluate(async (x, y, color) => {17 await window.__playwright__internal__object(drawWhitePixel)(x, y, color);18 }, x, y, color);19await page.evaluate(async (x, y, color) => {20 await window.__playwright__internal__object(drawBlackPixel)(x, y, color);21 }, x, y, color);22await page.evaluate(async (x, y, color) => {23 await window.__playwright__internal__object(drawCyanPixel)(x, y, color);24 }, x, y, color);25await page.evaluate(async (x, y, color) => {26 await window.__playwright__internal__object(drawMagentaPixel)(x, y, color);27 }, x, y, color);
Using AI Code Generation
1const { drawGrayPixel } = require('playwright/lib/server/chromium/crPixel');2const browser = await chromium.launch();3const context = await browser.newContext();4const page = await context.newPage();5await page.setViewportSize({ width: 100, height: 100 });6await page.evaluate((width, height, drawGrayPixel) => {7 const canvas = document.createElement('canvas');8 canvas.width = width;9 canvas.height = height;10 document.body.appendChild(canvas);11 const ctx = canvas.getContext('2d');12 const imageData = ctx.createImageData(width, height);13 drawGrayPixel(imageData, 0, 0, 0, 0.5);14 ctx.putImageData(imageData, 0, 0);15}, 100, 100, drawGrayPixel);16await page.screenshot({ path: 'screenshot.png' });17await browser.close();18{19 "dependencies": {20 }21}
LambdaTest’s Playwright tutorial will give you a broader idea about the Playwright automation framework, its unique features, and use cases with examples to exceed your understanding of Playwright testing. This tutorial will give A to Z guidance, from installing the Playwright framework to some best practices and advanced concepts.
Get 100 minutes of automation test minutes FREE!!