32 lines
1.4 KiB
TypeScript
32 lines
1.4 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';
|
|
|
|
// 下滑添加页,逐屏找含 "Remote" 的文案,定位标准 Remote 入口的确切文字与位置
|
|
async function main() {
|
|
const needle = process.argv[2] || 'Remote';
|
|
const driver = createDriver();
|
|
await driver.createSession();
|
|
try {
|
|
await navigateToAddPage(driver, 'Device');
|
|
await sleep(2500);
|
|
for (let i = 0; i <= 10; i++) {
|
|
const src = await driver.getSource();
|
|
const hits = Array.from(src.matchAll(/text="([^"]*)"/g)).map((m) => m[1])
|
|
.filter((t) => t && t.toLowerCase().includes(needle.toLowerCase()));
|
|
console.log(`屏#${i} 命中"${needle}":`, hits.length ? Array.from(new Set(hits)).join(' | ') : '(无)');
|
|
// 命中精确 needle 就停
|
|
const exact = await driver.findElementRaw('-android uiautomator', `new UiSelector().text("${needle}")`);
|
|
if (exact) { console.log(`>>> 屏#${i} 找到精确 text("${needle}")`); break; }
|
|
await driver.scrollDown(700);
|
|
await sleep(1200);
|
|
}
|
|
} finally {
|
|
await driver.destroySession();
|
|
}
|
|
}
|
|
main().catch((e) => { console.error('ERR:', e.message); process.exit(1); });
|