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; let html: string;
if (command.selector) { if (command.selector) {
html = await page.locator(command.selector).innerHTML(); const locator = browser.getLocator(command.selector);
html = await locator.innerHTML();
} else { } else {
html = await page.content(); html = await page.content();
} }
@@ -1704,8 +1705,8 @@ async function handleIsChecked(
} }
async function handleCount(command: CountCommand, browser: BrowserManager): Promise<Response> { async function handleCount(command: CountCommand, browser: BrowserManager): Promise<Response> {
const page = browser.getPage(); const locator = browser.getLocator(command.selector);
const count = await page.locator(command.selector).count(); const count = await locator.count();
return successResponse(command.id, { count }); return successResponse(command.id, { count });
} }
@@ -1713,8 +1714,8 @@ async function handleBoundingBox(
command: BoundingBoxCommand, command: BoundingBoxCommand,
browser: BrowserManager browser: BrowserManager
): Promise<Response> { ): Promise<Response> {
const page = browser.getPage(); const locator = browser.getLocator(command.selector);
const box = await page.locator(command.selector).boundingBox(); const box = await locator.boundingBox();
return successResponse(command.id, { box }); return successResponse(command.id, { box });
} }
@@ -2109,7 +2110,7 @@ async function handleWheel(command: WheelCommand, browser: BrowserManager): Prom
const page = browser.getPage(); const page = browser.getPage();
if (command.selector) { if (command.selector) {
const element = page.locator(command.selector); const element = browser.getLocator(command.selector);
await element.hover(); await element.hover();
} }
@@ -2148,14 +2149,14 @@ async function handleHighlight(
command: HighlightCommand, command: HighlightCommand,
browser: BrowserManager browser: BrowserManager
): Promise<Response> { ): Promise<Response> {
const page = browser.getPage(); const locator = browser.getLocator(command.selector);
await page.locator(command.selector).highlight(); await locator.highlight();
return successResponse(command.id, { highlighted: true }); return successResponse(command.id, { highlighted: true });
} }
async function handleClear(command: ClearCommand, browser: BrowserManager): Promise<Response> { async function handleClear(command: ClearCommand, browser: BrowserManager): Promise<Response> {
const page = browser.getPage(); const locator = browser.getLocator(command.selector);
await page.locator(command.selector).clear(); await locator.clear();
return successResponse(command.id, { cleared: true }); return successResponse(command.id, { cleared: true });
} }
@@ -2163,8 +2164,8 @@ async function handleSelectAll(
command: SelectAllCommand, command: SelectAllCommand,
browser: BrowserManager browser: BrowserManager
): Promise<Response> { ): Promise<Response> {
const page = browser.getPage(); const locator = browser.getLocator(command.selector);
await page.locator(command.selector).selectText(); await locator.selectText();
return successResponse(command.id, { selected: true }); return successResponse(command.id, { selected: true });
} }
@@ -2172,8 +2173,8 @@ async function handleInnerText(
command: InnerTextCommand, command: InnerTextCommand,
browser: BrowserManager browser: BrowserManager
): Promise<Response> { ): Promise<Response> {
const page = browser.getPage(); const locator = browser.getLocator(command.selector);
const text = await page.locator(command.selector).innerText(); const text = await locator.innerText();
return successResponse(command.id, { text }); return successResponse(command.id, { text });
} }
@@ -2182,7 +2183,8 @@ async function handleInnerHtml(
browser: BrowserManager browser: BrowserManager
): Promise<Response> { ): Promise<Response> {
const page = browser.getPage(); 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() }); return successResponse(command.id, { html, origin: page.url() });
} }
@@ -2200,8 +2202,8 @@ async function handleSetValue(
command: SetValueCommand, command: SetValueCommand,
browser: BrowserManager browser: BrowserManager
): Promise<Response> { ): Promise<Response> {
const page = browser.getPage(); const locator = browser.getLocator(command.selector);
await page.locator(command.selector).fill(command.value); await locator.fill(command.value);
return successResponse(command.id, { set: true }); return successResponse(command.id, { set: true });
} }
@@ -2209,8 +2211,8 @@ async function handleDispatch(
command: DispatchEventCommand, command: DispatchEventCommand,
browser: BrowserManager browser: BrowserManager
): Promise<Response> { ): Promise<Response> {
const page = browser.getPage(); const locator = browser.getLocator(command.selector);
await page.locator(command.selector).dispatchEvent(command.event, command.eventInit); await locator.dispatchEvent(command.event, command.eventInit);
return successResponse(command.id, { dispatched: command.event }); return successResponse(command.id, { dispatched: command.event });
} }
@@ -2360,8 +2362,7 @@ async function handleGetByTestId(
} }
async function handleNth(command: NthCommand, browser: BrowserManager): Promise<Response> { async function handleNth(command: NthCommand, browser: BrowserManager): Promise<Response> {
const page = browser.getPage(); const base = browser.getLocator(command.selector);
const base = page.locator(command.selector);
const locator = command.index === -1 ? base.last() : base.nth(command.index); const locator = command.index === -1 ? base.last() : base.nth(command.index);
switch (command.subaction) { switch (command.subaction) {
@@ -2528,8 +2529,8 @@ async function handleMultiSelect(
command: MultiSelectCommand, command: MultiSelectCommand,
browser: BrowserManager browser: BrowserManager
): Promise<Response> { ): Promise<Response> {
const page = browser.getPage(); const locator = browser.getLocator(command.selector);
const selected = await page.locator(command.selector).selectOption(command.values); const selected = await locator.selectOption(command.values);
return successResponse(command.id, { selected }); return successResponse(command.id, { selected });
} }
@@ -2738,7 +2739,7 @@ async function handleDiffScreenshot(
const page = browser.getPage(); const page = browser.getPage();
let screenshotBuffer: Buffer; let screenshotBuffer: Buffer;
if (command.selector) { 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' }); screenshotBuffer = await locator.screenshot({ type: 'png' });
} else { } else {
screenshotBuffer = await page.screenshot({ fullPage: command.fullPage, type: 'png' }); screenshotBuffer = await page.screenshot({ fullPage: command.fullPage, type: 'png' });