Skip to content

Commit 3b16446

Browse files
authored
Merge pull request #728 from getmaxun/focus-fix
feat: focused element typing
2 parents 8a5e518 + 7e7b1ef commit 3b16446

File tree

2 files changed

+22
-5
lines changed

2 files changed

+22
-5
lines changed

server/src/browser-management/inputHandlers.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -718,6 +718,8 @@ const handleKeyboardAction = async (
718718
}
719719

720720
const generator = activeBrowser.generator;
721+
722+
await page.press(data.selector, data.key);
721723
await generator.onDOMKeyboardAction(page, data);
722724
logger.log(
723725
"debug",

src/components/recorder/DOMBrowserRenderer.tsx

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -611,19 +611,34 @@ export const DOMBrowserRenderer: React.FC<RRWebDOMBrowserRendererProps> = ({
611611
if (!isInCaptureMode && socket && snapshot?.baseUrl) {
612612
const iframe = iframeRef.current;
613613
if (iframe) {
614-
const iframeRect = iframe.getBoundingClientRect();
615-
const iframeX = lastMousePosition.x - iframeRect.left;
616-
const iframeY = lastMousePosition.y - iframeRect.top;
614+
const focusedElement = iframeDoc.activeElement as HTMLElement;
615+
let coordinates = { x: 0, y: 0 };
616+
617+
if (focusedElement && focusedElement !== iframeDoc.body) {
618+
// Get coordinates from the focused element
619+
const rect = focusedElement.getBoundingClientRect();
620+
coordinates = {
621+
x: rect.left + rect.width / 2,
622+
y: rect.top + rect.height / 2
623+
};
624+
} else {
625+
// Fallback to last mouse position if no focused element
626+
const iframeRect = iframe.getBoundingClientRect();
627+
coordinates = {
628+
x: lastMousePosition.x - iframeRect.left,
629+
y: lastMousePosition.y - iframeRect.top
630+
};
631+
}
617632

618633
const selector = clientSelectorGenerator.generateSelector(
619634
iframeDoc,
620-
{ x: iframeX, y: iframeY },
635+
coordinates,
621636
ActionType.Keydown
622637
);
623638

624639
const elementInfo = clientSelectorGenerator.getElementInformation(
625640
iframeDoc,
626-
{ x: iframeX, y: iframeY },
641+
coordinates,
627642
clientSelectorGenerator.getCurrentState().listSelector,
628643
clientSelectorGenerator.getCurrentState().getList
629644
);

0 commit comments

Comments
 (0)