AI_UIAutomation/utils/common/timer.helper.ts

112 lines
3.9 KiB
TypeScript

import { DeviceDriver } from '../../drivers/types';
import { sleep, waitForSource } from './element.helper';
import { scrollToAndTap } from './device-settings.helper';
export interface TimerConfig {
time?: string;
repeat?: string[];
action?: string;
}
export async function navigateToTimerPage(driver: DeviceDriver): Promise<boolean> {
return await scrollToAndTap(driver, 'Schedules');
}
export async function addTimer(driver: DeviceDriver, config: TimerConfig = {}): Promise<boolean> {
if (driver.platform === 'android') {
const addEl = await driver.findElementRaw('-android uiautomator', 'new UiSelector().text("Add")');
if (!addEl) return false;
await driver.tapElement(addEl);
await sleep(3000);
} else {
const addEl = await driver.findElementRaw('name', 'Add');
if (!addEl) return false;
await driver.tapElement(addEl);
await waitForSource(driver, 'At Time', 5000);
}
const source = await driver.getSource();
if (!source.includes('At Time') && !source.includes('Save')) return false;
// Save with defaults (Only once + Turn off)
if (driver.platform === 'android') {
const saveEl = await driver.findElementRaw('-android uiautomator', 'new UiSelector().text("Save")');
if (!saveEl) return false;
await driver.tapElement(saveEl);
} else {
const saveEl = await driver.findElementRaw('name', 'Save');
if (!saveEl) return false;
await driver.tapElement(saveEl);
}
await sleep(3000);
return true;
}
export async function deleteAllTimers(driver: DeviceDriver): Promise<boolean> {
if (driver.platform === 'android') {
const topRight = await driver.findElementRaw('id', 'com.theswitchbot.switchbot:id/top_bar_right_icon');
if (!topRight) return false;
await driver.tapElement(topRight);
await sleep(2000);
let deleteEl = await driver.findElementRaw('-android uiautomator', 'new UiSelector().text("Delete")');
if (!deleteEl) {
await driver.tapElement(topRight);
await sleep(2000);
deleteEl = await driver.findElementRaw('-android uiautomator', 'new UiSelector().text("Delete")');
}
if (!deleteEl) return false;
await driver.tapElement(deleteEl);
await sleep(1000);
const selectAll = await driver.findElementRaw('-android uiautomator', 'new UiSelector().text("Select All")');
if (selectAll) {
await driver.tapElement(selectAll);
await sleep(500);
}
deleteEl = await driver.findElementRaw('-android uiautomator', 'new UiSelector().text("Delete")');
if (!deleteEl) return false;
await driver.tapElement(deleteEl);
await sleep(1500);
const okEl = await driver.findElementRaw('-android uiautomator', 'new UiSelector().text("OK")');
if (okEl) await driver.tapElement(okEl);
await sleep(2000);
const source = await driver.getSource();
return source.includes("haven't set any schedules") || source.includes('Tap Add below');
}
// iOS
await driver.tap(362, 69);
await sleep(1500);
let deleteEl = await driver.findElementRaw('name', 'Delete');
if (!deleteEl) return false;
await driver.tapElement(deleteEl);
await sleep(1500);
deleteEl = await driver.findElementRaw('name', 'Delete');
if (deleteEl) await driver.tapElement(deleteEl);
await sleep(1500);
const confirmEl = await driver.findElementRaw('name', 'Confirm');
if (confirmEl) await driver.tapElement(confirmEl);
await sleep(2000);
const source = await driver.getSource();
return source.includes("haven't set any schedules") || source.includes('Tap Add below');
}
export async function getTimerCount(driver: DeviceDriver): Promise<number> {
const source = await driver.getSource();
if (source.includes("haven't set any schedules") || source.includes('Tap Add below')) return 0;
if (driver.platform === 'android') {
const matches = source.match(/text="Only once"/g);
return matches ? matches.length : 0;
}
const matches = source.match(/name="Only once"/g);
return matches ? matches.length : 0;
}