const IFRAME_SELECTOR = 'iframe[title="Hoofdinhoud"]'; const CELL_SELECTOR = 'a[title="Sectie uitvouwen Algemene opleidingsonderdelen"]'; /** * Extracted function to get the text content of a node. * @param {ElementHandle} node - The node to get the text content from. * @returns {Promise} The text content of the node. */ async function getNodeTextContent(node) { return await node.evaluate((node) => node.textContent); } /** * Extracted function to retrieve the content frame. * @param {Page} page - The Puppeteer page object. * @returns {Promise} The content frame. */ async function getContentFrame(page) { await page.waitForSelector(IFRAME_SELECTOR); const iframe = await page.$(IFRAME_SELECTOR); if (!iframe) { throw new Error("Could not find iframe on the AA-page"); } console.log("iframe found on AA-page"); return await iframe.contentFrame(); } /** * Checks if the 'Startpakket' is available by verifying text content in a cell * and the `aria-expanded` attribute. * * @param {Page} page - The Puppeteer page object. * @returns {Promise} True if the 'Startpakket' is available, false otherwise. */ async function isStartPakketAvailable(page) { const contentFrame = await getContentFrame(page); await contentFrame.waitForSelector(CELL_SELECTOR); const cell = await contentFrame.$(CELL_SELECTOR); if (!cell) { throw new Error( "Cell inside function isStartPakketAvailable is not defined" ); } const isCollapsed = await isAriaExpandedFalse(cell); console.log(`Aria-expanded: ${isCollapsed}`); return { isCollapsed: isCollapsed, // Add more properties here in the future as needed }; } /** * Checks if the given cell node has an `aria-expanded` attribute with a value of 'false'. * * @param {ElementHandle} node - The node to check the `aria-expanded` attribute. * @returns {Promise} True if the `aria-expanded` attribute is 'false', false otherwise. */ async function isAriaExpandedFalse(node) { if (!node) { throw new Error("Node is not defined"); } return await node.evaluate( (element) => element.getAttribute("aria-expanded") === "false" ); } module.exports = isStartPakketAvailable;