Fix HTML retrieval by using browser.getLocator() for selector operations (#745)

* Fix HTML retrieval by using browser.getLocator() for selector operations

This PR fixes an issue where HTML content retrieval was not working properly when using selectors.

**Problem:**
The `get html` command and other selector-based operations were failing because they were using `page.locator()` directly instead of the browser manager's locator method.

**Changes:**
- Updated `handleContent()` to use `browser.getLocator()` instead of `page.locator()` for HTML retrieval with selectors
- Applied the same fix to other affected functions: `handleCount()`, `handleBoundingBox()`, `handleInnerText()`, `handleInnerHtml()`, and `handleSetValue()`
- Ensures consistent locator handling across all selector-based operations

**Implementation Details:**
The fix replaces direct `page.locator(command.selector)` calls with `browser.getLocator(command.selector)` to ensure proper element selection and interaction through the browser manager's abstraction layer.

Fixes #735

* Fix remaining page.locator() calls to use browser.getLocator()

Apply the same fix to all remaining functions that were using
page.locator(command.selector) directly instead of going through
browser.getLocator(): handleWheel, handleHighlight, handleClear,
handleSelectAll, handleDispatch, handleNth, handleMultiSelect,
and handleDiffScreenshot.

---------

Co-authored-by: ctate <366502+ctate@users.noreply.github.com>
This commit is contained in:
Chris Tate
2026-03-13 01:11:13 -05:00
committed by GitHub
co-authored by ctate
parent b9a24df40f
commit 870876b5c1
+25 -24
View File
@@ -1056,7 +1056,8 @@ async function handleContent(
let html: string;
if (command.selector) {
html = await page.locator(command.selector).innerHTML();
const locator = browser.getLocator(command.selector);
html = await locator.innerHTML();
} else {
html = await page.content();
}
@@ -1704,8 +1705,8 @@ async function handleIsChecked(
}
async function handleCount(command: CountCommand, browser: BrowserManager): Promise<Response> {
const page = browser.getPage();
const count = await page.locator(command.selector).count();
const locator = browser.getLocator(command.selector);
const count = await locator.count();
return successResponse(command.id, { count });
}
@@ -1713,8 +1714,8 @@ async function handleBoundingBox(
command: BoundingBoxCommand,
browser: BrowserManager
): Promise<Response> {
const page = browser.getPage();
const box = await page.locator(command.selector).boundingBox();
const locator = browser.getLocator(command.selector);
const box = await locator.boundingBox();
return successResponse(command.id, { box });
}
@@ -2109,7 +2110,7 @@ async function handleWheel(command: WheelCommand, browser: BrowserManager): Prom
const page = browser.getPage();
if (command.selector) {
const element = page.locator(command.selector);
const element = browser.getLocator(command.selector);
await element.hover();
}
@@ -2148,14 +2149,14 @@ async function handleHighlight(
command: HighlightCommand,
browser: BrowserManager
): Promise<Response> {
const page = browser.getPage();
await page.locator(command.selector).highlight();
const locator = browser.getLocator(command.selector);
await locator.highlight();
return successResponse(command.id, { highlighted: true });
}
async function handleClear(command: ClearCommand, browser: BrowserManager): Promise<Response> {
const page = browser.getPage();
await page.locator(command.selector).clear();
const locator = browser.getLocator(command.selector);
await locator.clear();
return successResponse(command.id, { cleared: true });
}
@@ -2163,8 +2164,8 @@ async function handleSelectAll(
command: SelectAllCommand,
browser: BrowserManager
): Promise<Response> {
const page = browser.getPage();
await page.locator(command.selector).selectText();
const locator = browser.getLocator(command.selector);
await locator.selectText();
return successResponse(command.id, { selected: true });
}
@@ -2172,8 +2173,8 @@ async function handleInnerText(
command: InnerTextCommand,
browser: BrowserManager
): Promise<Response> {
const page = browser.getPage();
const text = await page.locator(command.selector).innerText();
const locator = browser.getLocator(command.selector);
const text = await locator.innerText();
return successResponse(command.id, { text });
}
@@ -2182,7 +2183,8 @@ async function handleInnerHtml(
browser: BrowserManager
): Promise<Response> {
const page = browser.getPage();
const html = await page.locator(command.selector).innerHTML();
const locator = browser.getLocator(command.selector);
const html = await locator.innerHTML();
return successResponse(command.id, { html, origin: page.url() });
}
@@ -2200,8 +2202,8 @@ async function handleSetValue(
command: SetValueCommand,
browser: BrowserManager
): Promise<Response> {
const page = browser.getPage();
await page.locator(command.selector).fill(command.value);
const locator = browser.getLocator(command.selector);
await locator.fill(command.value);
return successResponse(command.id, { set: true });
}
@@ -2209,8 +2211,8 @@ async function handleDispatch(
command: DispatchEventCommand,
browser: BrowserManager
): Promise<Response> {
const page = browser.getPage();
await page.locator(command.selector).dispatchEvent(command.event, command.eventInit);
const locator = browser.getLocator(command.selector);
await locator.dispatchEvent(command.event, command.eventInit);
return successResponse(command.id, { dispatched: command.event });
}
@@ -2360,8 +2362,7 @@ async function handleGetByTestId(
}
async function handleNth(command: NthCommand, browser: BrowserManager): Promise<Response> {
const page = browser.getPage();
const base = page.locator(command.selector);
const base = browser.getLocator(command.selector);
const locator = command.index === -1 ? base.last() : base.nth(command.index);
switch (command.subaction) {
@@ -2528,8 +2529,8 @@ async function handleMultiSelect(
command: MultiSelectCommand,
browser: BrowserManager
): Promise<Response> {
const page = browser.getPage();
const selected = await page.locator(command.selector).selectOption(command.values);
const locator = browser.getLocator(command.selector);
const selected = await locator.selectOption(command.values);
return successResponse(command.id, { selected });
}
@@ -2738,7 +2739,7 @@ async function handleDiffScreenshot(
const page = browser.getPage();
let screenshotBuffer: Buffer;
if (command.selector) {
const locator = browser.getLocatorFromRef(command.selector) || page.locator(command.selector);
const locator = browser.getLocator(command.selector);
screenshotBuffer = await locator.screenshot({ type: 'png' });
} else {
screenshotBuffer = await page.screenshot({ fullPage: command.fullPage, type: 'png' });