From 93a644b1d848fc4e9cf1f39e785adf93ebbdae7f Mon Sep 17 00:00:00 2001 From: Karishma Shukla Date: Thu, 21 Aug 2025 20:23:48 +0530 Subject: [PATCH 1/9] fix: no cursor position if page closed --- server/src/workflow-management/classes/Generator.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/server/src/workflow-management/classes/Generator.ts b/server/src/workflow-management/classes/Generator.ts index eb0e33a7..a5bc2edc 100644 --- a/server/src/workflow-management/classes/Generator.ts +++ b/server/src/workflow-management/classes/Generator.ts @@ -541,6 +541,10 @@ export class WorkflowGenerator { } if ((elementInfo?.tagName === 'INPUT' || elementInfo?.tagName === 'TEXTAREA') && selector) { + if (page.isClosed()) { + logger.log('debug', 'Page is closed, cannot get cursor position'); + return; + } const positionAndCursor = await page.evaluate( ({ selector, coords }) => { const getCursorPosition = (element: any, clickX: any) => { @@ -1342,4 +1346,4 @@ export class WorkflowGenerator { public clearLastIndex = () => { this.generatedData.lastIndex = null; } -} \ No newline at end of file +} From 28a6eb465fd09be23cb5cb6b87dd666fc9401ca2 Mon Sep 17 00:00:00 2001 From: Karishma Shukla Date: Thu, 21 Aug 2025 20:29:36 +0530 Subject: [PATCH 2/9] fix: if page closed !get element info --- server/src/workflow-management/selector.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/server/src/workflow-management/selector.ts b/server/src/workflow-management/selector.ts index eddd1fb1..80e82c52 100644 --- a/server/src/workflow-management/selector.ts +++ b/server/src/workflow-management/selector.ts @@ -21,6 +21,10 @@ export const getElementInformation = async ( ) => { try { if (!getList || listSelector !== '') { + if (page.isClosed()) { + logger.debug('Page is closed, cannot get element information'); + return null; + } const elementInfo = await page.evaluate( async ({ x, y }) => { const getDeepestElementFromPoint = (x: number, y: number): HTMLElement | null => { From 1abfd6a8119836252763f381e621e417188e0a48 Mon Sep 17 00:00:00 2001 From: Karishma Shukla Date: Thu, 21 Aug 2025 20:30:49 +0530 Subject: [PATCH 3/9] fix: if page closed !get element info --- server/src/workflow-management/selector.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/server/src/workflow-management/selector.ts b/server/src/workflow-management/selector.ts index 80e82c52..d4cc3463 100644 --- a/server/src/workflow-management/selector.ts +++ b/server/src/workflow-management/selector.ts @@ -306,6 +306,10 @@ export const getElementInformation = async ( ); return elementInfo; } else { + if (page.isClosed()) { + logger.debug('Page is closed, cannot get element information (else branch)'); + return null; + } const elementInfo = await page.evaluate( async ({ x, y }) => { const getDeepestElementFromPoint = (x: number, y: number): HTMLElement | null => { From b6ee449b9ce949af2b62aac8571c73e1a4654346 Mon Sep 17 00:00:00 2001 From: Karishma Shukla Date: Thu, 21 Aug 2025 20:31:26 +0530 Subject: [PATCH 4/9] fix: if page closed !get element rect --- server/src/workflow-management/selector.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/server/src/workflow-management/selector.ts b/server/src/workflow-management/selector.ts index d4cc3463..3dfd344f 100644 --- a/server/src/workflow-management/selector.ts +++ b/server/src/workflow-management/selector.ts @@ -619,6 +619,10 @@ export const getElementInformation = async ( export const getRect = async (page: Page, coordinates: Coordinates, listSelector: string, getList: boolean) => { try { if (!getList || listSelector !== '') { + if (page.isClosed()) { + logger.debug('Page is closed, cannot get element rect'); + return null; + } const rect = await page.evaluate( async ({ x, y }) => { const getDeepestElementFromPoint = (x: number, y: number): HTMLElement | null => { From 1abd277fc4fc3ea73cbd626e6cd953fd854230b8 Mon Sep 17 00:00:00 2001 From: Karishma Shukla Date: Thu, 21 Aug 2025 20:32:19 +0530 Subject: [PATCH 5/9] fix: if page closed !get element rect --- server/src/workflow-management/selector.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/server/src/workflow-management/selector.ts b/server/src/workflow-management/selector.ts index 3dfd344f..48918fe5 100644 --- a/server/src/workflow-management/selector.ts +++ b/server/src/workflow-management/selector.ts @@ -846,6 +846,10 @@ export const getRect = async (page: Page, coordinates: Coordinates, listSelector ); return rect; } else { + if (page.isClosed()) { + logger.debug('Page is closed, cannot get element rect (else branch)'); + return null; + } const rect = await page.evaluate( async ({ x, y }) => { const getDeepestElementFromPoint = (x: number, y: number): HTMLElement | null => { From d1c5a604174c34c4687f672f079af9d02d6d76ce Mon Sep 17 00:00:00 2001 From: Karishma Shukla Date: Thu, 21 Aug 2025 20:33:14 +0530 Subject: [PATCH 6/9] fix: if page closed !get element selector --- server/src/workflow-management/selector.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/server/src/workflow-management/selector.ts b/server/src/workflow-management/selector.ts index 48918fe5..a0cc9b6b 100644 --- a/server/src/workflow-management/selector.ts +++ b/server/src/workflow-management/selector.ts @@ -1092,6 +1092,10 @@ export const getRect = async (page: Page, coordinates: Coordinates, listSelector */ export const getSelectors = async (page: Page, coordinates: Coordinates) => { try { + if (page.isClosed()) { + logger.debug('Page is closed, cannot get selectors'); + return null; + } const selectors: any = await page.evaluate(async ({ x, y }) => { // version @medv/finder // https://github.com/antonmedv/finder/blob/master/finder.ts From 2081fbbee8a81c5394589266c7bf522305287823 Mon Sep 17 00:00:00 2001 From: Karishma Shukla Date: Thu, 21 Aug 2025 20:35:42 +0530 Subject: [PATCH 7/9] fix: if page closed !get non unique selectors --- server/src/workflow-management/selector.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/server/src/workflow-management/selector.ts b/server/src/workflow-management/selector.ts index a0cc9b6b..21777f9c 100644 --- a/server/src/workflow-management/selector.ts +++ b/server/src/workflow-management/selector.ts @@ -2030,6 +2030,10 @@ export const getNonUniqueSelectors = async (page: Page, coordinates: Coordinates try { if (!listSelector) { + if (page.isClosed()) { + logger.debug('Page is closed, cannot get non-unique selectors'); + return { generalSelector: '' }; + } const selectors = await page.evaluate(({ x, y }: { x: number, y: number }) => { const getDeepestElementFromPoint = (x: number, y: number): HTMLElement | null => { let elements = document.elementsFromPoint(x, y) as HTMLElement[]; From 6fa4f88dee09bd8cbdfe9a8c08a4e6f099d1f2b9 Mon Sep 17 00:00:00 2001 From: Karishma Shukla Date: Thu, 21 Aug 2025 20:36:23 +0530 Subject: [PATCH 8/9] fix: if page closed !get list selectors --- server/src/workflow-management/selector.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/server/src/workflow-management/selector.ts b/server/src/workflow-management/selector.ts index 21777f9c..f7cc5c72 100644 --- a/server/src/workflow-management/selector.ts +++ b/server/src/workflow-management/selector.ts @@ -2388,6 +2388,10 @@ export const getNonUniqueSelectors = async (page: Page, coordinates: Coordinates return selectors || { generalSelector: '' }; } else { // When we have a list selector, we need special handling while maintaining shadow DOM and frame support + if (page.isClosed()) { + logger.debug('Page is closed, cannot get list selectors'); + return { generalSelector: '' }; + } const selectors = await page.evaluate(({ x, y }: { x: number, y: number }) => { const getDeepestElementFromPoint = (x: number, y: number): HTMLElement | null => { let elements = document.elementsFromPoint(x, y) as HTMLElement[]; From 1eea6290dac00e4cbeb4657301235cefdedfef4e Mon Sep 17 00:00:00 2001 From: Karishma Shukla Date: Thu, 21 Aug 2025 20:37:01 +0530 Subject: [PATCH 9/9] fix: if page closed !get child selectors --- server/src/workflow-management/selector.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/server/src/workflow-management/selector.ts b/server/src/workflow-management/selector.ts index f7cc5c72..43c1d2f8 100644 --- a/server/src/workflow-management/selector.ts +++ b/server/src/workflow-management/selector.ts @@ -2753,6 +2753,10 @@ export const getNonUniqueSelectors = async (page: Page, coordinates: Coordinates export const getChildSelectors = async (page: Page, parentSelector: string): Promise => { try { + if (page.isClosed()) { + logger.debug('Page is closed, cannot get child selectors'); + return []; + } const childSelectors = await page.evaluate((parentSelector: string) => { // Function to get a non-unique selector based on tag and class (if present) function getNonUniqueSelector(element: HTMLElement): string {