-
Notifications
You must be signed in to change notification settings - Fork 0
/
advanced-visual-proofreading-test.mjs
98 lines (83 loc) · 2.69 KB
/
advanced-visual-proofreading-test.mjs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
import puppeteer from "puppeteer";
import sharp from "sharp";
import { existsSync, mkdirSync } from "fs";
import path from "path";
import {
CAPTURE_URL,
DESIGN_DIR,
DIFF_DIR,
SCREENSHOT_DIR,
testSettings,
VIEW_PORT,
} from "./test-config.mjs";
(async () => {
// 出力先フォルダがなければ作成
if (!existsSync(SCREENSHOT_DIR)) {
mkdirSync(SCREENSHOT_DIR);
}
if (!existsSync(DIFF_DIR)) {
mkdirSync(DIFF_DIR);
}
// Puppeteer起動
const browser = await puppeteer.launch();
// 設定ごとに実行
for (const { design, capturePath } of testSettings) {
// デザイン画像へのパス
const designFilePath = `${DESIGN_DIR}/${design}`;
// デザイン画像のファイル名取得
const designFileName = path.parse(designFilePath).name;
// スクリーンショットの格納先とファイル名
const screenshotFilePath = `${SCREENSHOT_DIR}/screenshot_${designFileName}.png`;
// Puppeteerの設定
const page = await browser.newPage();
await page.setViewport(VIEW_PORT);
await page.goto(`${CAPTURE_URL}${capturePath}`);
// アニメーションが終わるまで待機
// スクロールで実行されるなにかがある場合
await page.evaluate(() => {
scroll(0,99999)
setTimeout(()=>{
scroll(0,0)
},200)
});
await page.waitForTimeout(5000);
// ページ全体のスクリーンショット撮影
await page.screenshot({
path: screenshotFilePath,
fullPage: true,
});
const designImage = sharp(designFilePath);
const designImageMetaData = await designImage.metadata();
const screenshotImage = sharp(screenshotFilePath);
// デザイン画像のサイズ取得
const designImageSize = {
width: designImageMetaData.width,
height: designImageMetaData.height,
};
// スクリーンショット画像をデザイン画像のサイズにリサイズ
const resizedScreenshot = await screenshotImage
.resize({
width: designImageSize.width,
height: designImageSize.height,
fit: null,
position: "left top",
withoutEnlargement: true,
})
.toBuffer();
// デザイン画像とスクリーンショット画像を重ねて差の絶対値で差分を検出
const difference = await designImage
.composite([
{
input: resizedScreenshot,
blend: "difference",
gravity: "northwest",
},
])
.toBuffer();
// わかりやすいよう白黒反転し、ファイル出力
await sharp(difference)
.negate({ alpha: false })
.toFile(`${DIFF_DIR}/diff_${designFileName}.png`);
}
await browser.close();
})();