From 8fe1b61fdd4f2e3ba8f85c7a5f7e3dfa5c4193e3 Mon Sep 17 00:00:00 2001 From: karishmas6 Date: Mon, 2 Sep 2024 20:46:30 +0530 Subject: [PATCH] feat: get child selectors --- server/src/workflow-management/selector.ts | 31 ++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/server/src/workflow-management/selector.ts b/server/src/workflow-management/selector.ts index 1941e49d..02e5f494 100644 --- a/server/src/workflow-management/selector.ts +++ b/server/src/workflow-management/selector.ts @@ -785,6 +785,37 @@ export const getNonUniqueSelectors = async (page: Page, coordinates: Coordinates }; +export const getChildSelectors = async (page: Page, parentSelector: string): Promise => { + try { + const childSelectors = await page.evaluate((parentSelector: string) => { + const parentElement = document.querySelector(parentSelector); + if (!parentElement) return []; + + const childElements = Array.from(parentElement.children); + return childElements.map(child => { + let selector = child.tagName.toLowerCase(); + if (child.className) { + const classes = child.className.split(/\s+/).filter((cls: string) => Boolean(cls)); + if (classes.length > 0) { + const validClasses = classes.filter((cls: string) => !cls.startsWith('!') && !cls.includes(':')); + if (validClasses.length > 0) { + selector += '.' + validClasses.map(cls => CSS.escape(cls)).join('.'); + } + } + } + return selector; + }); + }, parentSelector); + + return childSelectors || []; + } catch (error) { + console.error('Error in getChildSelectors:', error); + return []; + } +}; + + + /** * Returns the first pair from the given workflow that contains the given selector * inside the where condition, and it is the only selector there.