Lightningbeam/tests/helpers/app.js

65 lines
1.9 KiB
JavaScript

/**
* App helper utilities for Tauri application testing
*/
/**
* Wait for the Lightningbeam app to be fully loaded and ready
* @param {number} timeout - Maximum time to wait in ms
*/
export async function waitForAppReady(timeout = 5000) {
await browser.waitForApp();
// Check for "Animation" card on start screen and click it if present
// The card has a label div with text "Animation"
const animationCard = await browser.$('.focus-card-label*=Animation');
if (await animationCard.isExisting()) {
// Click the parent focus-card element
const card = await animationCard.parentElement();
await card.waitForClickable({ timeout: 2000 });
await card.click();
await browser.pause(1000); // Wait longer for animation view to load
} else {
// Legacy: Check for "Create New File" dialog and click Create if present
const createButton = await browser.$('button*=Create');
if (await createButton.isExisting()) {
await createButton.waitForClickable({ timeout: 2000 });
await createButton.click();
await browser.pause(500); // Wait for dialog to close
}
}
// Wait for the main canvas to be present
const canvas = await browser.$('canvas');
await canvas.waitForExist({ timeout });
// Additional wait for any initialization
await browser.pause(500);
}
/**
* Get the main canvas element
* @returns {Promise<WebdriverIO.Element>}
*/
export async function getCanvas() {
return await browser.$('canvas');
}
/**
* Get canvas dimensions
* @returns {Promise<{width: number, height: number}>}
*/
export async function getCanvasSize() {
const canvas = await getCanvas();
const size = await canvas.getSize();
return size;
}
/**
* Take a screenshot of the canvas
* @param {string} filename - Name for the screenshot file
*/
export async function takeCanvasScreenshot(filename) {
const canvas = await getCanvas();
return await canvas.saveScreenshot(`./tests/screenshots/${filename}`);
}