UNPKG

@edugouvfr/ngx-dsfr

Version:

NgxDsfr est un portage Angular des éléments d'interface du Système de Design de l'État Français (DSFR).

123 lines (118 loc) 5.09 kB
import { expect } from '@playwright/test'; class BasePageObjectModel { constructor(page, componentName, componentType) { this.page = page; this.componentName = componentName; this.componentType = componentType; this.sbFrame = page.frameLocator('#storybook-preview-iframe'); // par défaut le contexte de localisation est la frame (story preview) this._locatorContext = this.frame; } get frame() { return this.sbFrame; } getByAltText(text, options) { return this._locatorContext.getByAltText(text, options); } getByLabel(text, options) { return this._locatorContext.getByLabel(text, options); } getByPlaceholder(text, options) { return this._locatorContext.getByPlaceholder(text, options); } getByRole(role, options) { return this._locatorContext.getByRole(role, options); } getByTestId(testId) { return this._locatorContext.getByTestId(testId); } getByText(text, options) { return this._locatorContext.getByText(text, options); } getByTitle(text, options) { return this._locatorContext.getByTitle(text, options); } locator(selector, options) { return this._locatorContext.locator(selector, options); } async goToPage(variant = 'default', waitUntil = 'load') { this._locatorContext = this.frame; return this.page.goto(`?path=/story/${this.componentType}-${this.componentName}--${variant}`, { waitUntil: waitUntil, }); } /** * Permet de naviguer vers l'url de la story en mode standalone (hors storybook). */ async goToFullScreenPage(variant = 'default', svgName = '') { this._locatorContext = this.page; const url = `iframe.html?id=${this.componentType}-${this.componentName}--${variant}`; await this.doActionAndCheckSvg(this.page.goto(url, { waitUntil: 'load' }), svgName); } /** * Test par comparaison de screenshot. Permet de prévenir les régressions visuelles sur un composant. * * @param componentLocator Locator correspondant au composant sujet du screenshot * @param screenshotName Nom du screenshot (souvent le nom du composant) * @param options Options possibles de la méthode toHaveScreenshot */ async testSnapshot(componentLocator, screenshotName, options) { if (componentLocator === this.page) { await expect(this.page.locator('storybook-root')).toBeVisible(); } else { await expect(componentLocator).toBeVisible(); } await expect(componentLocator).toHaveScreenshot(screenshotName + '.png', options); } /** * Permet de vérifier le bon chargement d'un svg via la reponse de sa requête http. * * @param name Nom du svg (sans l'extension '.svg'). Vérifie le chargement de n'importe quel svg si non renseigné * @returns La Requête reçue correspondant au chargement du svg */ async waitForSvg(name = '') { return this.page.waitForResponse((response) => response.url().endsWith(`${name}.svg`)); } /** * Test le bon chargement du svg correspondant après avoir effectué une action spécifique afin d'assurer * la cohérence graphique d'une page en cas de tests screenshot * * @param action Promise correspondant à l'action censé déclencher le chargement du nouveau svg * @param svgName Nom du svg sensé être chargé (sans l'extension '.svg'). Vérifie le chargement de n'importe quel svg si non renseigné * @returns Une Promise contenant un tableau avec en index 0 le retour de l'action effectuée et en index 1 la reponse * de la requête d'appel du svg */ async doActionAndCheckSvg(action, svgName = '') { const promises = [action]; if (svgName) promises.push(this.waitForSvg(svgName)); return Promise.all(promises); } /** * Permet de récupérer des éléments appartenant à l'onglet 'Controls' de Storybook. */ sbControlLocator(selector, options) { return this.page.locator(selector, options); } /** * Actionne la combinaison clavier spécifiée et assure que le focus est positionné sur le bon élément en séquence. * * @param tabNavigationSequence Décrit la séquence de navigation attendue. * @param keyPressContext Fournit le locator pointant vers l'élément qui doit être actionné. * @param withShift */ async expectTabSequence(tabNavigationSequence, keyPressContext, withShift = false) { const keyToPress = withShift ? 'Shift+Tab' : 'Tab'; for (let navigationStepIndex in tabNavigationSequence) { await keyPressContext.press(keyToPress); await expect(tabNavigationSequence[navigationStepIndex]).toBeFocused(); } } } /* Public API Surface of @edugouvfr/ngx-dsfr/sdk */ /** * Generated bundle index. Do not edit. */ export { BasePageObjectModel }; //# sourceMappingURL=edugouvfr-ngx-dsfr-sdk.mjs.map