45 lines
2.0 KiB
TypeScript
45 lines
2.0 KiB
TypeScript
import * as dotenv from 'dotenv';
|
|
import * as path from 'path';
|
|
import * as fs from 'fs';
|
|
dotenv.config({ path: path.resolve(__dirname, '../.env') });
|
|
import { createDriver } from '../drivers/factory';
|
|
import { navigateToAddPage } from '../utils/common/navigation.helper';
|
|
import { sleep } from '../utils/common/element.helper';
|
|
|
|
// 导航到 Add <Category> 页并逐页截图(过 Disclaimers),便于人工确认实际 UI
|
|
async function main() {
|
|
const category = process.argv[2] || 'Meter';
|
|
const steps = parseInt(process.argv[3] || '3', 10); // 截多少页(每页点一次 Next)
|
|
const driver = createDriver();
|
|
await driver.createSession();
|
|
const outDir = path.resolve(__dirname, '../reports');
|
|
fs.mkdirSync(outDir, { recursive: true });
|
|
try {
|
|
await navigateToAddPage(driver, 'Device');
|
|
await sleep(2500);
|
|
const find = () => driver.findElementRaw('-android uiautomator', `new UiSelector().text("${category}")`);
|
|
let el = await find();
|
|
for (let i = 0; i < 6 && !el; i++) { await sleep(800); el = await find(); }
|
|
for (let i = 0; i < 8 && !el; i++) { await driver.scrollDown(600); await sleep(700); el = await find(); }
|
|
if (!el) { console.log('未找到品类', category); return; }
|
|
await driver.tapElement(el);
|
|
await sleep(3000);
|
|
|
|
for (let i = 1; i <= steps; i++) {
|
|
const b64 = await driver.screenshot();
|
|
const f = path.join(outDir, `add_${category}_step${i}.png`);
|
|
fs.writeFileSync(f, Buffer.from(b64, 'base64'));
|
|
const src = await driver.getSource();
|
|
const t = Array.from(src.matchAll(/text="([^"]{1,50})"/g)).map((m) => m[1]).filter(Boolean);
|
|
console.log(`step${i} 截图 ${f} | text: ${Array.from(new Set(t)).join(' | ')}`);
|
|
const next = await driver.findElementRaw('-android uiautomator', 'new UiSelector().text("Next")');
|
|
if (!next) { console.log(' 无 Next,停止'); break; }
|
|
await driver.tapElement(next);
|
|
await sleep(2500);
|
|
}
|
|
} finally {
|
|
await driver.destroySession();
|
|
}
|
|
}
|
|
main().catch((e) => { console.error('ERR:', e.message); process.exit(1); });
|