refactor: make browser actions ref-only
This commit is contained in:
@@ -10,18 +10,10 @@ import {
|
||||
let nextUploadArmId = 0;
|
||||
let nextDialogArmId = 0;
|
||||
|
||||
type LocatorPage = Parameters<typeof refLocator>[0];
|
||||
|
||||
function resolveLocator(
|
||||
page: LocatorPage,
|
||||
opts: { ref?: string; selector?: string },
|
||||
) {
|
||||
const selector =
|
||||
typeof opts.selector === "string" ? opts.selector.trim() : "";
|
||||
if (selector) return page.locator(selector);
|
||||
const ref = typeof opts.ref === "string" ? opts.ref.trim() : "";
|
||||
if (ref) return refLocator(page, ref);
|
||||
throw new Error("ref or selector is required");
|
||||
function requireRef(value: unknown): string {
|
||||
const ref = typeof value === "string" ? value.trim() : "";
|
||||
if (!ref) throw new Error("ref is required");
|
||||
return ref;
|
||||
}
|
||||
|
||||
export async function snapshotAiViaPlaywright(opts: {
|
||||
@@ -55,8 +47,7 @@ export async function snapshotAiViaPlaywright(opts: {
|
||||
export async function clickViaPlaywright(opts: {
|
||||
cdpPort: number;
|
||||
targetId?: string;
|
||||
ref?: string;
|
||||
selector?: string;
|
||||
ref: string;
|
||||
doubleClick?: boolean;
|
||||
button?: "left" | "right" | "middle";
|
||||
modifiers?: Array<"Alt" | "Control" | "ControlOrMeta" | "Meta" | "Shift">;
|
||||
@@ -67,10 +58,7 @@ export async function clickViaPlaywright(opts: {
|
||||
targetId: opts.targetId,
|
||||
});
|
||||
ensurePageState(page);
|
||||
const locator = resolveLocator(page, {
|
||||
ref: opts.ref,
|
||||
selector: opts.selector,
|
||||
});
|
||||
const locator = refLocator(page, requireRef(opts.ref));
|
||||
const timeout = Math.max(
|
||||
500,
|
||||
Math.min(60_000, Math.floor(opts.timeoutMs ?? 8000)),
|
||||
@@ -157,8 +145,7 @@ export async function pressKeyViaPlaywright(opts: {
|
||||
export async function typeViaPlaywright(opts: {
|
||||
cdpPort: number;
|
||||
targetId?: string;
|
||||
ref?: string;
|
||||
selector?: string;
|
||||
ref: string;
|
||||
text: string;
|
||||
submit?: boolean;
|
||||
slowly?: boolean;
|
||||
@@ -167,10 +154,7 @@ export async function typeViaPlaywright(opts: {
|
||||
const text = String(opts.text ?? "");
|
||||
const page = await getPageForTargetId(opts);
|
||||
ensurePageState(page);
|
||||
const locator = resolveLocator(page, {
|
||||
ref: opts.ref,
|
||||
selector: opts.selector,
|
||||
});
|
||||
const locator = refLocator(page, requireRef(opts.ref));
|
||||
const timeout = Math.max(500, Math.min(60_000, opts.timeoutMs ?? 8000));
|
||||
if (opts.slowly) {
|
||||
await locator.click({ timeout });
|
||||
|
||||
Reference in New Issue
Block a user