import { DeviceDriver } from '../../drivers/types'; export function sleep(ms: number): Promise { return new Promise(r => setTimeout(r, ms)); } export async function waitForElement( driver: DeviceDriver, using: string, value: string, timeout = 10000 ): Promise { const start = Date.now(); while (Date.now() - start < timeout) { const el = await driver.findElementRaw(using, value); if (el) return el; await sleep(1000); } return null; } export async function waitForSource( driver: DeviceDriver, keyword: string, timeout = 10000 ): Promise { const start = Date.now(); while (Date.now() - start < timeout) { const src = await driver.getSource(); if (src.includes(keyword)) return true; await sleep(1000); } return false; } export async function scrollUntilFound( driver: DeviceDriver, using: string, value: string, maxScrolls = 5, scrollDistance = 300 ): Promise { for (let i = 0; i < maxScrolls; i++) { const el = await driver.findElementRaw(using, value); if (el) return el; await driver.scrollDown(scrollDistance); await sleep(800); } return null; } export async function tapWithRetry( driver: DeviceDriver, using: string, value: string, retries = 3 ): Promise { for (let i = 0; i < retries; i++) { try { const el = await driver.findElementRaw(using, value); if (el) { await driver.tapElement(el); return true; } } catch { /* stale element, retry */ } await sleep(500); } return false; } export async function sourceContains(driver: DeviceDriver, keyword: string): Promise { const src = await driver.getSource(); return src.includes(keyword); } export async function findElementOnScreen( driver: DeviceDriver, keyword: string ): Promise { let src = await driver.getSource(); if (src.includes(keyword)) return true; await driver.scrollDown(300); await sleep(800); src = await driver.getSource(); return src.includes(keyword); }