89 lines
3.3 KiB
JavaScript
89 lines
3.3 KiB
JavaScript
import { chromium } from "playwright";
|
|
|
|
const HA = "http://homeassistant-dev:8123";
|
|
const REFRESH = process.env.HA_REFRESH_TOKEN;
|
|
if (!REFRESH) { console.error("Set HA_REFRESH_TOKEN env var"); process.exit(1); }
|
|
|
|
const browser = await chromium.connect("ws://localhost:3000");
|
|
|
|
function getPanel() {
|
|
return "var ha = document.querySelector('home-assistant'); " +
|
|
"var main = ha && ha.shadowRoot && ha.shadowRoot.querySelector('home-assistant-main'); " +
|
|
"var drawer = main && main.shadowRoot && main.shadowRoot.querySelector('ha-drawer'); " +
|
|
"var resolver = drawer && drawer.querySelector('partial-panel-resolver'); " +
|
|
"var custom = resolver && resolver.querySelector('ha-panel-custom'); " +
|
|
"var p = custom && custom.querySelector('maintenance-supporter-panel'); ";
|
|
}
|
|
|
|
async function login(page) {
|
|
await page.goto(HA);
|
|
await page.waitForTimeout(1000);
|
|
await page.evaluate((refresh) => {
|
|
localStorage.setItem("hassTokens", JSON.stringify({
|
|
hassUrl: "http://homeassistant-dev:8123",
|
|
clientId: "http://homeassistant-dev:8123/",
|
|
refresh_token: refresh,
|
|
access_token: "",
|
|
token_type: "Bearer",
|
|
expires_in: 1800,
|
|
expires: 0,
|
|
}));
|
|
}, REFRESH);
|
|
await page.goto(HA + "/maintenance-supporter");
|
|
await page.waitForTimeout(6000);
|
|
}
|
|
|
|
// Desktop screenshot (1280x900)
|
|
const desktopCtx = await browser.newContext({ viewport: { width: 1280, height: 900 }, locale: "de" });
|
|
const desktopPage = await desktopCtx.newPage();
|
|
await login(desktopPage);
|
|
|
|
var info = await desktopPage.evaluate("{ " + getPanel() +
|
|
"var result = []; " +
|
|
"if (p && p._objects) { " +
|
|
" for (var i = 0; i < p._objects.length; i++) { " +
|
|
" var obj = p._objects[i]; " +
|
|
" var tasks = []; " +
|
|
" if (obj.tasks) for (var j = 0; j < obj.tasks.length; j++) tasks.push({ id: obj.tasks[j].id }); " +
|
|
" result.push({ entry_id: obj.entry_id, tasks: tasks }); " +
|
|
" } " +
|
|
"} " +
|
|
"JSON.stringify(result); " +
|
|
"}");
|
|
var data = JSON.parse(info);
|
|
var entryId = data[0].entry_id;
|
|
var taskId = data[0].tasks[0].id;
|
|
|
|
// Desktop: task detail
|
|
await desktopPage.evaluate("{ " + getPanel() + "if (p) p._showTask('" + entryId + "', '" + taskId + "'); }");
|
|
await desktopPage.waitForTimeout(2000);
|
|
await desktopPage.screenshot({ path: "screenshots/desktop_task.png" });
|
|
console.log("Desktop task detail done");
|
|
|
|
// Desktop: overview
|
|
await desktopPage.evaluate("{ " + getPanel() + "if (p) p._showOverview(); }");
|
|
await desktopPage.waitForTimeout(2000);
|
|
await desktopPage.screenshot({ path: "screenshots/desktop_overview.png" });
|
|
console.log("Desktop overview done");
|
|
|
|
await desktopCtx.close();
|
|
|
|
// Mobile screenshot (375x812, iPhone-like)
|
|
const mobileCtx = await browser.newContext({ viewport: { width: 375, height: 812 }, locale: "de", isMobile: true });
|
|
const mobilePage = await mobileCtx.newPage();
|
|
await login(mobilePage);
|
|
|
|
// Mobile: overview
|
|
await mobilePage.screenshot({ path: "screenshots/mobile_overview.png" });
|
|
console.log("Mobile overview done");
|
|
|
|
// Mobile: task detail
|
|
await mobilePage.evaluate("{ " + getPanel() + "if (p) p._showTask('" + entryId + "', '" + taskId + "'); }");
|
|
await mobilePage.waitForTimeout(2000);
|
|
await mobilePage.screenshot({ path: "screenshots/mobile_task.png" });
|
|
console.log("Mobile task detail done");
|
|
|
|
await mobileCtx.close();
|
|
await browser.close();
|
|
console.log("All screenshots done!");
|