diff --git a/server/src/workflow-management/classes/Generator.ts b/server/src/workflow-management/classes/Generator.ts index 609541de1..aa0c0f186 100644 --- a/server/src/workflow-management/classes/Generator.ts +++ b/server/src/workflow-management/classes/Generator.ts @@ -62,6 +62,8 @@ export class WorkflowGenerator { */ private getList: boolean = false; + private paginationMode: boolean = false; + private listSelector: string = ''; /** @@ -120,6 +122,9 @@ export class WorkflowGenerator { this.socket.on('listSelector', (data: { selector: string }) => { this.listSelector = data.selector; }) + this.socket.on('setPaginationMode', (data: { paginationMode: boolean }) => { + this.paginationMode = data.paginationMode; + }) } /** @@ -703,6 +708,25 @@ export class WorkflowGenerator { ? await getNonUniqueSelectors(page, coordinates, this.listSelector) : await getSelectors(page, coordinates); + if (this.paginationMode) { + if (selectorBasedOnCustomAction.hrefSelector) { + // Look for pagination-specific parameters that would make the selector unreliable + const isOverlySpecific = ( + selectorBasedOnCustomAction.hrefSelector.includes('page=') || + selectorBasedOnCustomAction.hrefSelector.includes('offset=') || + selectorBasedOnCustomAction.hrefSelector.includes('start=') || + /p=\d+/.test(selectorBasedOnCustomAction.hrefSelector) + ); + + // If the href selector is too specific for pagination, try the other selector + if (isOverlySpecific) { + selectorBasedOnCustomAction.hrefSelector = null; + selectorBasedOnCustomAction.accessibilitySelector = null; + selectorBasedOnCustomAction.generalSelector = null; + } + } + } + const bestSelector = getBestSelectorForAction( { type: action, @@ -715,6 +739,7 @@ export class WorkflowGenerator { hasOnlyText: elementInfo?.hasOnlyText || false, } as Action, ); + return bestSelector; } diff --git a/src/components/organisms/BrowserWindow.tsx b/src/components/organisms/BrowserWindow.tsx index b69a09213..300d2722d 100644 --- a/src/components/organisms/BrowserWindow.tsx +++ b/src/components/organisms/BrowserWindow.tsx @@ -212,6 +212,7 @@ export const BrowserWindow = () => { notify(`info`, t('browser_window.attribute_modal.notifications.pagination_select_success')); addListStep(listSelector!, fields, currentListId || 0, { type: paginationType, selector: highlighterData.selector }); } + socket?.emit('setPaginationMode', { paginationMode: false }); return; } diff --git a/src/context/browserActions.tsx b/src/context/browserActions.tsx index fd951f924..70f0e370f 100644 --- a/src/context/browserActions.tsx +++ b/src/context/browserActions.tsx @@ -54,6 +54,7 @@ export const ActionProvider = ({ children }: { children: ReactNode }) => { setPaginationMode(true); setCaptureStage('pagination'); socket?.emit('setGetList', { getList: false }); + socket?.emit('setPaginationMode', { paginationMode: true }); }; const stopPaginationMode = () => setPaginationMode(false);