You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

33 lines
890 B

import type { Locator, Page } from "playwright";
import { pageLocator } from "@/lib/rpa/locator";
import { getSelectorSpecs } from "@/lib/rpa/selector-specs";
import {
getSelector,
type RpaSelectorKey,
} from "@/lib/rpa/selectors";
import { ensureArray } from "@/workers/rpa/kernel/context-validator";
/** 所有 selector 访问的唯一入口 */
export class SelectorGraph {
resolve(key: RpaSelectorKey): string {
return getSelector(key);
}
specs(envKey: string): string[] {
return ensureArray(getSelectorSpecs(envKey));
}
locator(page: Page, key: RpaSelectorKey): Locator {
return pageLocator(page, this.resolve(key));
}
widget(page: Page): Locator {
return this.locator(page, "RPA_SELECTOR_QUOTE_WIDGET").first();
}
optionalEnv(key: string): string | undefined {
const value = process.env[key]?.trim();
return value || undefined;
}
}