61 lines
2.6 KiB
TypeScript
61 lines
2.6 KiB
TypeScript
import * as dotenv from 'dotenv';
|
|
import * as path from 'path';
|
|
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';
|
|
import { enterPairingMode } from '../utils/common/relay.helper';
|
|
|
|
// Meter add:选品类 → 过 Disclaimers → Add Meter 页按继电器 → 向下滑动找设备入口
|
|
async function main() {
|
|
const device = process.argv[2] || 'meter';
|
|
const category = process.argv[3] || 'Meter';
|
|
const keyword = process.argv[4] || 'Meter 3M';
|
|
const driver = createDriver();
|
|
await driver.createSession();
|
|
try {
|
|
await navigateToAddPage(driver, 'Device');
|
|
await sleep(2500);
|
|
const dump = async (label: string) => {
|
|
const src = await driver.getSource();
|
|
const t = Array.from(src.matchAll(/text="([^"]{1,50})"/g)).map((m) => m[1]).filter(Boolean);
|
|
const d = Array.from(src.matchAll(/content-desc="([^"]{1,50})"/g)).map((m) => m[1]).filter(Boolean);
|
|
console.log(`\n=== ${label} ===\n text:`, Array.from(new Set(t)).join(' | '), '\n desc:', Array.from(new Set(d)).join(' | '));
|
|
return src;
|
|
};
|
|
|
|
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(); }
|
|
console.log(`找到品类 ${category}:`, !!el);
|
|
if (!el) return;
|
|
await driver.tapElement(el);
|
|
await sleep(3000);
|
|
|
|
// 过一次 Disclaimers 的 Next
|
|
let src = await dump('选品类后');
|
|
if (src.includes('Disclaimer')) {
|
|
const next = await driver.findElementRaw('-android uiautomator', 'new UiSelector().text("Next")');
|
|
if (next) { await driver.tapElement(next); await sleep(2500); }
|
|
}
|
|
await dump('Add 页(滑动前)');
|
|
|
|
// 按继电器配对,设备开始广播
|
|
console.log(`\n>>> 按 ${device} 配对...`);
|
|
await enterPairingMode(device).catch((e) => console.log('relay 失败:', e.message));
|
|
await sleep(3000);
|
|
|
|
// 向下滑动查找设备入口
|
|
for (let i = 0; i <= 5; i++) {
|
|
src = await dump(i === 0 ? '配对后(顶部)' : `下滑#${i}`);
|
|
if (src.includes(keyword)) { console.log(`\n>>> 找到设备 "${keyword}"`); break; }
|
|
await driver.scrollDown(500);
|
|
await sleep(1500);
|
|
}
|
|
} finally {
|
|
await driver.destroySession();
|
|
}
|
|
}
|
|
main().catch((e) => { console.error('ERR:', e.message); process.exit(1); });
|