140 lines
4.5 KiB
TypeScript
140 lines
4.5 KiB
TypeScript
import { describe, it, beforeAll, afterAll, beforeEach, expect } from 'vitest';
|
|
import { DeviceDriver } from '../../drivers/types';
|
|
import { createDriver } from '../../drivers/factory';
|
|
import { TestReporter } from '../../utils/test-reporter';
|
|
import { AutomationHelper } from '../../utils/automation-helper';
|
|
import { sleep } from '../../utils/common/element.helper';
|
|
import * as dotenv from 'dotenv';
|
|
import * as path from 'path';
|
|
|
|
dotenv.config({ path: path.resolve(__dirname, '../../.env') });
|
|
|
|
describe('【通用自动化】- 创建/删除流程验证', () => {
|
|
let driver: DeviceDriver;
|
|
let reporter: TestReporter;
|
|
let helper: AutomationHelper;
|
|
|
|
beforeAll(async () => {
|
|
driver = createDriver();
|
|
await driver.createSession();
|
|
reporter = new TestReporter('Automation_General', driver.platform.toUpperCase());
|
|
helper = new AutomationHelper(driver);
|
|
});
|
|
|
|
beforeEach(async () => {
|
|
await driver.dismissPopupIfPresent();
|
|
helper.clearSteps();
|
|
});
|
|
|
|
afterAll(async () => {
|
|
reporter.generate();
|
|
await driver.destroySession();
|
|
});
|
|
|
|
function isAndroid() { return driver.platform === 'android'; }
|
|
|
|
async function logPageElements(): Promise<void> {
|
|
if (!isAndroid()) return;
|
|
const src = await driver.getSource();
|
|
const textRe = /text="([^"]{1,80})"/g;
|
|
const descRe = /content-desc="([^"]{1,80})"/g;
|
|
const texts: string[] = [];
|
|
const descs: string[] = [];
|
|
let m;
|
|
while ((m = textRe.exec(src)) !== null) {
|
|
if (m[1] && !texts.includes(m[1])) texts.push(m[1]);
|
|
}
|
|
while ((m = descRe.exec(src)) !== null) {
|
|
if (m[1] && !descs.includes(m[1])) descs.push(m[1]);
|
|
}
|
|
console.log('Page texts:', texts.join(' | '));
|
|
if (descs.length) console.log('Page descs:', descs.join(' | '));
|
|
}
|
|
|
|
it('2.1 导航到Automation Tab', { timeout: 60000 }, async () => {
|
|
const start = Date.now();
|
|
try {
|
|
const success = await helper.navigateToAutomationTab();
|
|
expect(success).toBe(true);
|
|
reporter.record('导航到Automation Tab', 'PASS', Date.now() - start, helper.getSteps().join(' → '));
|
|
} catch (e: any) {
|
|
reporter.record('导航到Automation Tab', 'FAIL', Date.now() - start, e.message);
|
|
throw e;
|
|
}
|
|
});
|
|
|
|
it('2.2 进入创建页面并探索', { timeout: 90000 }, async () => {
|
|
const start = Date.now();
|
|
try {
|
|
const onTab = await helper.navigateToAutomationTab();
|
|
expect(onTab).toBe(true);
|
|
|
|
const onCreate = await helper.enterCreatePage();
|
|
expect(onCreate).toBe(true);
|
|
|
|
// Verify creation page elements
|
|
const src = await driver.getSource();
|
|
expect(src).toContain('Add condition');
|
|
expect(src).toContain('Add action');
|
|
expect(src).toContain('Save');
|
|
|
|
reporter.record('进入创建页面', 'PASS', Date.now() - start, helper.getSteps().join(' → '));
|
|
} catch (e: any) {
|
|
await logPageElements();
|
|
reporter.record('进入创建页面', 'FAIL', Date.now() - start, e.message);
|
|
throw e;
|
|
}
|
|
});
|
|
|
|
it('2.3 选择条件-Smart Devices', { timeout: 120000 }, async () => {
|
|
const start = Date.now();
|
|
try {
|
|
const onTab = await helper.navigateToAutomationTab();
|
|
expect(onTab).toBe(true);
|
|
|
|
const onCreate = await helper.enterCreatePage();
|
|
expect(onCreate).toBe(true);
|
|
|
|
const condOk = await helper.selectCondition({
|
|
type: 'Smart Devices'
|
|
});
|
|
expect(condOk).toBe(true);
|
|
|
|
// Log what devices are available
|
|
await logPageElements();
|
|
helper.getSteps().push('设备列表已打印');
|
|
|
|
reporter.record('选择条件-Smart Devices', 'PASS', Date.now() - start, helper.getSteps().join(' → '));
|
|
} catch (e: any) {
|
|
await logPageElements();
|
|
reporter.record('选择条件-Smart Devices', 'FAIL', Date.now() - start, e.message);
|
|
throw e;
|
|
}
|
|
});
|
|
|
|
it('2.4 选择条件-Schedules', { timeout: 120000 }, async () => {
|
|
const start = Date.now();
|
|
try {
|
|
const onTab = await helper.navigateToAutomationTab();
|
|
expect(onTab).toBe(true);
|
|
|
|
const onCreate = await helper.enterCreatePage();
|
|
expect(onCreate).toBe(true);
|
|
|
|
const condOk = await helper.selectCondition({
|
|
type: 'Schedules'
|
|
});
|
|
expect(condOk).toBe(true);
|
|
|
|
// Log what schedule options are available
|
|
await logPageElements();
|
|
|
|
reporter.record('选择条件-Schedules', 'PASS', Date.now() - start, helper.getSteps().join(' → '));
|
|
} catch (e: any) {
|
|
await logPageElements();
|
|
reporter.record('选择条件-Schedules', 'FAIL', Date.now() - start, e.message);
|
|
throw e;
|
|
}
|
|
});
|
|
});
|