56 lines
3.1 KiB
JavaScript
56 lines
3.1 KiB
JavaScript
import { chromium } from "@playwright/test";
|
|
import assert from "node:assert/strict";
|
|
import { writeFile } from "node:fs/promises";
|
|
|
|
const url = process.env.FDM_URL || "http://127.0.0.1:4178";
|
|
assert.ok((await fetch(url)).ok);
|
|
const browser = await chromium.launch({
|
|
executablePath: "C:/Users/ikun/AppData/Local/ms-playwright/chromium_headless_shell-1234/chrome-headless-shell-win64/chrome-headless-shell.exe",
|
|
args: ["--enable-webgl", "--use-angle=swiftshader", "--enable-unsafe-swiftshader"],
|
|
});
|
|
const context = await browser.newContext({ viewport: { width: 1440, height: 900 } });
|
|
const page = await context.newPage();
|
|
const errors = [];
|
|
page.on("pageerror", (error) => errors.push(error.message));
|
|
try {
|
|
const start = Date.now();
|
|
await page.goto(url, { waitUntil: "domcontentloaded" });
|
|
await page.waitForSelector("#loading[hidden]", { state: "attached", timeout: 60000 });
|
|
const firstReadyMs = Date.now() - start;
|
|
await page.locator('[data-technology="thermal"]').click();
|
|
await page.waitForTimeout(500);
|
|
assert.ok(await page.locator("#thermal-overlay").isVisible());
|
|
const startup = await page.evaluate(() => performance.getEntriesByType("resource").map((r) => ({ name: r.name, bytes: r.transferSize })));
|
|
assert.ok(!startup.some((r) => /print-job\.(bin|gcode)|full\.bin|commands\.json/.test(r.name)));
|
|
await page.waitForSelector('#prepare-talk[data-ready="true"]', { timeout: 240000 });
|
|
const fullReadyMs = Date.now() - start;
|
|
await page.locator('[data-technology="model"]').click();
|
|
await context.setOffline(true);
|
|
const offlineReady = Date.now();
|
|
await page.locator("#layer").fill("714");
|
|
await page.waitForFunction(() => document.querySelector("#current-layer").textContent === "714");
|
|
assert.ok((await page.locator("#raw-command").textContent()).startsWith("G"));
|
|
await page.locator("#layer").fill("300");
|
|
await page.waitForFunction(() => document.querySelector("#current-layer").textContent === "300");
|
|
const layerSwitchMs = Date.now() - offlineReady;
|
|
await page.locator("#play").click();
|
|
const previous = await page.locator("#timeline").inputValue();
|
|
await page.waitForTimeout(700);
|
|
assert.notEqual(await page.locator("#timeline").inputValue(), previous);
|
|
await page.locator('[data-technology="nozzle"]').click();
|
|
await page.locator("#disassemble").click();
|
|
await page.waitForTimeout(1200);
|
|
await page.locator('[data-technology="thermal"]').click();
|
|
await page.locator("#overheat-fault").click();
|
|
await page.waitForTimeout(400);
|
|
assert.ok((await page.locator("#melt-status").textContent()).includes("偏高"));
|
|
const before = await page.locator("#scene").getAttribute("data-thermal");
|
|
await page.waitForTimeout(400);
|
|
assert.notEqual(await page.locator("#scene").getAttribute("data-thermal"), before);
|
|
await page.screenshot({ path: "artifacts/stream-background.png", fullPage: true });
|
|
assert.deepEqual(errors, []);
|
|
const report = { url, firstReadyMs, fullReadyMs, layerSwitchMs, startup, loadedPageOfflinePlayback: true, errors };
|
|
await writeFile("artifacts/stream-report.json", JSON.stringify(report, null, 2));
|
|
console.log(JSON.stringify(report, null, 2));
|
|
} finally { await browser.close(); }
|