@uuv/cypress
Version:
A solution to facilitate the writing and execution of E2E tests understandable by any human being using cucumber(BDD) and cypress
634 lines (633 loc) • 34 kB
JavaScript
;
/*******************************
NE PAS MODIFIER, FICHIER GENERE
*******************************/
Object.defineProperty(exports, "__esModule", { value: true });
/**
* Software Name : UUV
*
* SPDX-License-Identifier: MIT
*
* This software is distributed under the MIT License,
* see the "LICENSE" file for more details
*
* Authors: NJAKO MOLOM Louis Fredice & SERVICAL Stanley
* Software description: Make test writing fast, understandable by any human
* understanding English or French.
*/
const cypress_cucumber_preprocessor_1 = require("@badeball/cypress-cucumber-preprocessor");
const _context_1 = require("../_context");
require("../../../../cypress/commands");
const core_engine_1 = require("../core-engine");
const a11y_1 = require("@uuv/a11y");
const __common_1 = require("./../_.common");
const dom_accessibility_api_1 = require("dom-accessibility-api");
/**
* Navigue vers l'Uri passé en paramètre (url complète étant constituée de la BASE_URL + Uri) ou navigue vers l'Url si ça commence par http:// ou https://
* */
(0, cypress_cucumber_preprocessor_1.When)(`je visite l'Url {string}`, function (siteUrl) {
if (siteUrl.match("^http:\\/\\/|https:\\/\\/")) {
cy.visit(`${siteUrl}`);
}
else {
cy.visit(`${Cypress.config().baseUrl}${siteUrl}`);
}
});
/**
* Déclenche un click sur l'élément sélectionné.<br/>Assurez vous d'avoir effectué une sélection d'élément avant avec les phrases <strong>Je vais à l'intérieur...</strong>.
* */
(0, cypress_cucumber_preprocessor_1.When)(`je clique`, function () {
if (haveKeyBoardFocused()) {
cy.focused().click();
}
else {
cy.uuvCheckContextWithinFocusedElement().then(context => {
context.withinFocusedElement.click();
});
}
});
/**
* Déclenche un click sur un élément avec le rôle et le nom donnés
* */
(0, cypress_cucumber_preprocessor_1.When)(`je clique sur l'élément avec le rôle {string} et le nom {string}`, function (role, name) {
(0, core_engine_1.click)(role, name);
});
/**
* Saisie de la phrase passée en paramètre (utile par exemple pour remplir un champ de formulaire).<br/>Assurez vous d'avoir effectué une sélection d'élément avant avec les phrases <strong>je vais à l'intérieur...</strong>.
* */
(0, cypress_cucumber_preprocessor_1.When)(`je saisie le(s) mot(s) {string}`, function (textToType) {
type(textToType);
});
/**
* Saisit de la phrase passée en paramètre (utile par exemple pour remplir un champ de formulaire).<br/>Assurez vous d'avoir effectué une sélection d'élément avant avec les phrases <strong>je vais à l'intérieur...</strong>.
* */
(0, cypress_cucumber_preprocessor_1.When)(`j'entre la valeur {string}`, function (textToType) {
type(textToType);
});
/**
* Saisie de la phrase passée en paramètre dans une cellule d'une grille ag-Grid (utile par exemple pour remplir une cellule dans une grille).<br/>Assurez vous d'avoir effectué une sélection d'élément avant avec les phrases <strong>je vais à l'intérieur...</strong>.
* */
(0, cypress_cucumber_preprocessor_1.When)(`je saisie le(s) mot(s) {string} dans la cellule aggrid à la ligne {int} et la colonne nommée {string}`, function (textToType, lineNumber, columnName) {
cy.uuvCheckContextWithinFocusedElement().then(context => {
context.withinFocusedElement.then(focusedElement => {
// Confirm the element is a grid or treegrid
// eslint-disable-next-line @typescript-eslint/no-unused-expressions, no-unused-expressions
expect(focusedElement.get(0), "Focus element doesn't have grid/treegrid role").not.to.be.null;
expect((0, dom_accessibility_api_1.getRole)(focusedElement.get(0)), "Focus element doesn't have grid/treegrid role").to.be.oneOf(["grid", "treegrid"]);
cy.wrap(focusedElement).findByRole("columnheader", { name: columnName })
.uuvFoundedElement()
.then(colmunHeaderElement => {
// Retrieve column index
const columnIndex = Number(colmunHeaderElement.get(0).getAttribute("aria-colindex")) - 1;
cy.wrap(focusedElement).findAllByRole("row").then((rows) => {
cy.wrap(rows[lineNumber]).findAllByRole("gridcell").then((cells) => {
// Double click on the cell
cy.wrap(cells[columnIndex]).dblclick();
// Type text in the cell
cy.findByLabelText("Input Editor").type(textToType);
});
});
});
});
});
});
/**
* Sélectionne l'option passée en paramètre (utile par exemple pour remplir un champ le liste déroulante).<br/>Assurez vous d'avoir effectué une sélection d'élément avant avec les phrases <strong>je vais à l'intérieur de la liste déroulante nommée 'maListeDeroulante'</strong>.
* */
(0, cypress_cucumber_preprocessor_1.When)(`je sélectionne la valeur {string}`, function (valueToSet) {
cy.uuvCheckContextWithinFocusedElement(true).then((context) => {
if (context.withinFocusedElement) {
context.withinFocusedElement.select(valueToSet);
}
else if (haveKeyBoardFocused()) {
cy.focused().select(valueToSet);
}
});
});
/**
* Check that the current page have the following partial [result](https://accessibilite.numerique.gouv.fr/methode/criteres-et-tests/) based on RGAA standard
* */
(0, cypress_cucumber_preprocessor_1.When)(`je dois voir une liste déroulante nommée {string} avec la valeur {string}`, function (name, expectedValue) {
cy.uuvFindByRole("combobox", { name: name })
.uuvFoundedElement()
.uuvFindByRole("option", { name: expectedValue, selected: true })
.uuvFoundedElement()
.should("exist");
});
/**
* Check that the current page have the following partial [result](https://accessibilite.numerique.gouv.fr/methode/criteres-et-tests/) based on RGAA standard
* */
(0, cypress_cucumber_preprocessor_1.When)(`je sélectionne la valeur {string} dans la liste déroulante nommée {string}`, function (valueToSet, name) {
cy.uuvFindByRole("combobox", { name: name })
.uuvFoundedElement()
.select(valueToSet);
});
/**
* Répète la touche le nombre de fois spécifié en utilisant | comme ceci : num|{key}
* */
(0, cypress_cucumber_preprocessor_1.When)(`j'appuie {int} fois sur {string}`, function (nbTimes, key) {
for (let i = 1; i <= nbTimes; i++) {
(0, __common_1.pressKey)(key);
}
});
/**
* Simule un appui sur la touche spécifiée : <table><thead><tr><th>Touche</th><th>Description</th></tr></thead><tbody><tr><td>{tab}</td><td>Tabulation</td></tr><tr><td>{reverseTab}</td><td>Tabulation arrière</td></tr><tr><td>{down}</td><td>Flèche du bas</td></tr><tr><td>{right}</td><td>Flèche de droite</td></tr><tr><td>{left}</td><td>Flèche de gauche</td></tr><tr><td>{up}</td><td>Flèche du haut</td></tr></tbody></table>.<br/>Assurez vous d'avoir effectué une sélection d'élément avant avec les phrases <strong>Je vais à l'intérieur...</strong>.
* */
(0, cypress_cucumber_preprocessor_1.When)(`j'appuie sur {string}`, function (key) {
(0, __common_1.pressKey)(key);
});
/**
* se déplace au précédent élément HTML atteignable avec la tabulation retour<br/><a target='_blank' href='https://github.com/e2e-test-quest/uuv/blob/main/example/fr-keyboard.feature'>Exemples</a>
* */
(0, cypress_cucumber_preprocessor_1.When)(`je vais au précédent élément au clavier`, function () {
(0, __common_1.pressKey)("{reverseTab}");
});
/**
* se déplace au prochain élément HTML atteignable avec la tabulation<br/><a target='_blank' href='https://github.com/e2e-test-quest/uuv/blob/main/example/fr-keyboard.feature'>Exemples</a>
* */
(0, cypress_cucumber_preprocessor_1.When)(`je vais au prochain élément au clavier`, function () {
(0, __common_1.pressKey)("{tab}");
});
////////////////////////////////////////////
// Context ACTIONS
////////////////////////////////////////////
/**
* Configure les dimensions de la fenêtre avec à un des préréglages définit par le moteur d'exécution à savoir pour Cypress: [lien](https://docs.cypress.io/api/commands/viewport#Preset) et pour Playwright: [lien](https://github.com/microsoft/playwright/blob/main/packages/playwright-core/src/server/deviceDescriptorsSource.json)
* */
(0, cypress_cucumber_preprocessor_1.Given)(`je redimensionne la fenêtre à la vue {string}`, function (viewportPreset) {
cy.viewport(viewportPreset);
});
/**
* Configure les dimensions de la fenêtre à la largeur et la longueur spécifiées
* */
(0, cypress_cucumber_preprocessor_1.Given)(`je redimensionne la fenêtre avec une largeur de {int} px et une longueur de {int} px`, function (width, height) {
cy.viewport(width, height);
});
/**
* Démarre une session de navigation au clavier à partir du haut de la page<br/><a target='_blank' href='https://github.com/e2e-test-quest/uuv/blob/main/example/fr-keyboard.feature'>Exemples</a>
* */
(0, cypress_cucumber_preprocessor_1.Given)(`je commence une navigation au clavier depuis le haut de la page`, function () {
cy.get("body").last().realClick({ x: 0.5, y: 0.5 });
});
/**
* Positionne le timeout (en milliseconde) pour la recherche des éléments dans le dom <br />⚠ pensez à déselectionner l'élement avec <b>[je reinitialise le contexte](#je-reinitialise-le-contexte)</b> si vous n'agissez plus dessus
* */
(0, cypress_cucumber_preprocessor_1.When)(`je positionne le timeout à {int} secondes`, function (newTimeout) {
cy.uuvPatchContext({
timeout: newTimeout
});
});
/**
* key.when.withinElement.description
* */
(0, cypress_cucumber_preprocessor_1.When)(`je vais à l'intérieur de l'élément ayant pour rôle {string} et pour nom {string}`, function (role, name) {
(0, core_engine_1.withinRoleAndName)(role, name);
});
/**
* Sélectionne l'élément dont l'aria-label est spécifié <br />⚠ pensez à déselectionner l'élement avec <b>[je reinitialise le contexte](#je-reinitialise-le-contexte)</b> si vous n'agissez plus dessus
* */
(0, cypress_cucumber_preprocessor_1.When)(`je vais à l'intérieur de l'élément ayant pour aria-label {string}`, function (expectedAriaLabel) {
const foundedElement = cy.uuvFindByLabelText(expectedAriaLabel, {})
.uuvFoundedElement()
.should("exist");
cy.uuvPatchContext({
withinFocusedElement: foundedElement
});
});
/**
* key.when.withinElement.description
* */
(0, cypress_cucumber_preprocessor_1.When)(`je vais à l'intérieur de l'élément ayant pour testId {string}`, function (testId) {
const foundedElement = cy.uuvFindByTestId(testId)
.uuvFoundedElement()
.should("exist");
cy.uuvPatchContext({
withinFocusedElement: foundedElement
});
});
/**
* Sélectionne l'élément dont le sélecteur est spécifié <br />⚠ pensez à déselectionner l'élement avec <b>[je reinitialise le contexte](#je-reinitialise-le-contexte)</b> si vous n'agissez plus dessus
* */
(0, cypress_cucumber_preprocessor_1.When)(`je vais à l'intérieur de l'élément ayant pour sélecteur {string}`, function (selector) {
const foundedElement = cy.uuvGetContext().then(context => {
const parentElement = context.withinFocusedElement;
if (parentElement) {
// console.log("parentElement: ", parentElement);
return parentElement.should("exist").within(() => {
cy.get(selector).as("foundedChildElement");
});
}
cy.wrap(null).as("foundedChildElement");
return cy.get(selector);
}).uuvFoundedElement()
.should("exist");
cy.uuvPatchContext({
withinFocusedElement: foundedElement
});
});
/**
* Supprime l'élément sélectionné et le timeout du contexte
* */
(0, cypress_cucumber_preprocessor_1.When)(`je reinitialise le contexte`, function () {
cy.wrap(new _context_1.Context()).as("context");
if (haveKeyBoardFocused()) {
cy.focused().blur();
}
else {
cy.window().trigger("blur");
}
});
/**
* Simule une réponse d'API avec un contenu spécifique. <i>Si vous utilisez Playwright comme moteur d'exécution, les attributs <b>méthode de requête</b> et <b>nom</b> ne sont pas utilisés.</i>
* */
(0, cypress_cucumber_preprocessor_1.When)(`je simule une requête {} sur l'url {string} nommée {string} avec le contenu suivant {}`, function (verb, uri, name, body) {
cy
.intercept(verb, uri, {
body: body
})
.as(name);
});
/**
* Simule une réponse d'API avec un code http spécifique
* */
(0, cypress_cucumber_preprocessor_1.When)(`je simule une requête {} sur l'url {string} nommée {string} avec le code http {int}`, function (verb, uri, name, statusCode) {
cy
.intercept(verb, uri, {
statusCode: statusCode
})
.as(name);
});
/**
* Simule une réponse d'API avec un fichier spécifique ayant pour extension .json, .js, .coffee, .html, .txt, .csv, .png, .jpg, .jpeg, .gif, .tif, .tiff, .zip
* */
(0, cypress_cucumber_preprocessor_1.When)(`je simule une requête {} sur l'url {string} nommée {string} avec le fichier suivant {}`, function (verb, uri, name, fixture) {
cy
.intercept(verb, uri, {
fixture: fixture
})
.as(name);
});
////////////////////////////////////////////
// INTERCEPTION
////////////////////////////////////////////
/**
* Positionne un ou plusieurs headers à la requête http indiquée et uniquement pour la méthode Http (GET / POST / etc...) passée en paramètre. <i>Si le moteur d'exécution est playwright, la <b>méthode</b> n'est pas gérée.</i>
* */
(0, cypress_cucumber_preprocessor_1.When)(`je saisie le(s) header(s) pour l'Uri {string} et la methode {string}`, function (url, method, headersToSet) {
cy.intercept(method, url, (req) => {
req.headers = {
...req.headers,
...headersToSet.rowsHash()
};
req.continue();
});
});
/**
* Positionne un ou plusieurs headers à la requête http indiquée
* */
(0, cypress_cucumber_preprocessor_1.When)(`je saisie le(s) header(s) pour l'Uri {string}`, function (url, headersToSet) {
cy.intercept(url, (req) => {
req.headers = {
...req.headers,
...headersToSet.rowsHash()
};
req.continue();
});
});
////////////////////////////////////////////
// VALIDATION
////////////////////////////////////////////
/**
* Vérifie que la page courante a le bon titre
* */
(0, cypress_cucumber_preprocessor_1.Then)(`je dois voir le titre de page {string}`, function (pageTitle) {
cy.title().should("eq", pageTitle);
});
/**
* Vérifie qu'un élément Html existe avec le contenu spécifié
* */
(0, cypress_cucumber_preprocessor_1.Then)(`je dois voir un élément qui contient {string}`, function (textContent) {
cy.uuvFindByText(textContent, {})
.uuvFoundedElement()
.should("exist");
});
/**
* Vérifie qu'un élément Html n'existe pas avec le contenu spécifié
* */
(0, cypress_cucumber_preprocessor_1.Then)(`je ne dois pas voir un élément qui contient {string}`, function (textContent) {
cy.uuvFindByText(textContent, {})
.should("not.exist");
});
/**
* Vérifie qu'un élément Html existe avec l'attribut data-testid spécifié
* */
(0, cypress_cucumber_preprocessor_1.Then)(`je dois voir un élément ayant pour testId {string}`, function (testId) {
cy.uuvFindByTestId(testId)
.uuvFoundedElement()
.should("exist");
});
/**
* Vérifie qu'un élément Html n'existe pas avec l'attribut data-testid spécifié
* */
(0, cypress_cucumber_preprocessor_1.Then)(`je ne dois pas voir un élément ayant pour testId {string}`, function (testId) {
cy.uuvFindByTestId(testId)
.should("not.exist");
});
/**
* Vérifie qu'un élément Html existe avec le [rôle accessible](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles#aria_role_types) et le [nom accessible](https://russmaxdesign.github.io/html-elements-names/) spécifiés
* */
(0, cypress_cucumber_preprocessor_1.Then)(`je dois voir un élément avec le rôle {string} et le nom {string}`, function (role, name) {
(0, core_engine_1.findWithRoleAndName)(role, name);
});
/**
* Vérifie qu'un élément Html n'existe pas avec le [rôle accessible](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles#aria_role_types) et le [nom accessible](https://russmaxdesign.github.io/html-elements-names/) spécifiés
* */
(0, cypress_cucumber_preprocessor_1.Then)(`je ne dois pas voir un élément avec le rôle {string} et le nom {string}`, function (role, name) {
(0, core_engine_1.notFoundWithRoleAndName)(role, name);
});
/**
* Vérifie qu'un élément Html existe avec le [rôle accessible](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles#aria_role_types), le [nom accessible](https://russmaxdesign.github.io/html-elements-names/) et le contenu spécifiés
* */
(0, cypress_cucumber_preprocessor_1.Then)(`je dois voir un élément avec le rôle {string} et le nom {string} et pour contenu {string}`, function (expectedRole, name, expectedTextContent) {
(0, core_engine_1.findWithRoleAndNameAndContent)(expectedRole, name, expectedTextContent);
});
/**
* Vérifie que l'élément Html avec le [rôle accessible](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles#aria_role_types) et le [nom accessible](https://russmaxdesign.github.io/html-elements-names/) est focus<br/><a target='_blank' href='https://github.com/e2e-test-quest/uuv/blob/main/example/fr-keyboard.feature'>Exemples</a>
* */
(0, cypress_cucumber_preprocessor_1.Then)(`l'élément avec le rôle {string} et le nom {string} doit avoir le focus clavier`, function (expectedRole, name) {
(0, core_engine_1.findWithRoleAndNameFocused)(expectedRole, name);
});
/**
* Vérifie que l'élément Html avec le sélecteur est focus<br/><a target='_blank' href='https://github.com/e2e-test-quest/uuv/blob/main/example/fr-keyboard.feature'>Exemples</a>
* */
(0, cypress_cucumber_preprocessor_1.Then)(`l'élément avec le sélecteur {string} doit avoir le focus clavier`, function (selector) {
cy.get(selector).then(foundElement => {
cy.focused().then(focusedElement => {
expect(foundElement?.get(0)).eq(focusedElement?.get(0));
});
});
});
/**
* Vérifie qu'un élément Html existe avec le [rôle accessible](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles#aria_role_types), le [nom accessible](https://russmaxdesign.github.io/html-elements-names/) et le contenu spécifiés, et avec l'attribut disabled à true
* */
(0, cypress_cucumber_preprocessor_1.Then)(`je dois voir un élément avec le rôle {string} et le nom {string} et pour contenu {string} désactivé`, function (expectedRole, name, expectedTextContent) {
(0, core_engine_1.findWithRoleAndNameAndContentDisabled)(expectedRole, name, expectedTextContent);
});
/**
* Vérifie qu'un élément Html existe avec le [rôle accessible](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles#aria_role_types), le [nom accessible](https://russmaxdesign.github.io/html-elements-names/) et le contenu spécifiés et avec l'attribut disabled à false
* */
(0, cypress_cucumber_preprocessor_1.Then)(`je dois voir un élément avec le rôle {string} et le nom {string} et pour contenu {string} activé`, function (expectedRole, name, expectedTextContent) {
(0, core_engine_1.findWithRoleAndNameAndContentEnabled)(expectedRole, name, expectedTextContent);
});
/**
* Vérifie qu'un élément Html existe avec l'attribut aria-label spécifié
* */
(0, cypress_cucumber_preprocessor_1.Then)(`je dois voir un élément ayant pour aria-label {string}`, function (expectedAriaLabel) {
cy.uuvFindByLabelText(expectedAriaLabel, {})
.uuvFoundedElement()
.should("exist");
});
/**
* Vérifie qu'un élément Html n'existe pas avec l'attribut aria-label spécifié
* */
(0, cypress_cucumber_preprocessor_1.Then)(`je ne dois pas voir un élément ayant pour aria-label {string}`, function (expectedAriaLabel) {
cy.uuvFindByLabelText(expectedAriaLabel, {})
.should("not.exist");
});
/**
* Vérifie qu'un élément Html existe avec l'attribut aria-label et le contenu spécifiés
* */
(0, cypress_cucumber_preprocessor_1.Then)(`je dois voir un élément ayant pour aria-label {string} et pour contenu {string}`, function (expectedAriaLabel, expectedTextContent) {
cy.uuvFindByLabelText(expectedAriaLabel, {})
.uuvFoundedElement()
.should("exist")
.then((response) => {
assert.equal(response.length, 1);
(0, core_engine_1.assertTextContent)(response, expectedTextContent);
});
});
/**
* Se déplace au précédent élément HTML atteignable avec la tabulation et vérifie que l'élément Html avec le [rôle accessible](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles#aria_role_types) et le [nom accessible](https://russmaxdesign.github.io/html-elements-names/) a le focus clavier<br/><a target='_blank' href='https://github.com/e2e-test-quest/uuv/blob/main/example/fr-keyboard.feature'>Exemples</a>
* */
(0, cypress_cucumber_preprocessor_1.When)(`le précédent élément avec le focus clavier doit avoir le role {string} et le nom {string}`, function (expectedRole, name) {
(0, __common_1.pressKey)("{reverseTab}");
(0, core_engine_1.findWithRoleAndNameFocused)(expectedRole, name);
});
/**
* "Se déplace au prochain élément HTML atteignable avec la tabulation et vérifie que l'élément Html avec le [rôle accessible](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles#aria_role_types) et le [nom accessible](https://russmaxdesign.github.io/html-elements-names/) a le focus clavier<br/><a target='_blank' href='https://github.com/e2e-test-quest/uuv/blob/main/example/fr-keyboard.feature'>Exemples</a>
* */
(0, cypress_cucumber_preprocessor_1.When)(`le prochain élément avec le focus clavier doit avoir le role {string} et le nom {string}`, function (expectedRole, name) {
(0, __common_1.pressKey)("{tab}");
(0, core_engine_1.findWithRoleAndNameFocused)(expectedRole, name);
});
/**
* Vérifie qu'un bouchon nommé ait bien été consommé
* */
(0, cypress_cucumber_preprocessor_1.Then)(`je dois consommer le bouchon nommé {string}`, function (name) {
cy.wait([`@${name}`]);
});
/**
* key.when.click.withContext.description
* */
(0, cypress_cucumber_preprocessor_1.Then)(`j'attends {int} ms`, function (ms) {
cy.wait(ms);
});
/**
* Vérifie qu'il existe une liste avec le nom et les éléments de liste spécifiés.<br/> <u>Exemple</u>\n```gherkin\nAlors je dois voir une liste nommée "test-list" et contenant\n| Premier élément |\n| Deuxième élément |\n| Troisième élément |\n```
* */
(0, cypress_cucumber_preprocessor_1.Then)(`je dois voir une liste nommée {string} et contenant`, function (expectedListName, expectedElementsOfList) {
cy.uuvFindByRole("list", { name: expectedListName })
.uuvFoundedElement()
.should("exist")
.within(() => {
return cy.findAllByRole("listitem", {}).then((listitem) => {
const foundedElement = [];
for (let i = 0; i < listitem.length; i++) {
foundedElement.push([listitem[i].textContent]);
}
assert.equal(listitem.length, expectedElementsOfList.raw().length);
assert.deepEqual(foundedElement, expectedElementsOfList.raw(), `expected [${foundedElement}] to be [${expectedElementsOfList.raw()}]`);
});
});
});
/**
* Vérifie qu'il existe une grille (grid) avec le nom et les éléments spécifiés.<br/> <u>Exemple</u>\n```gherkin\nQuand je visite l'Url "https://e2e-test-quest.github.io/simple-webapp/grid.html"\nAlors je dois voir une liste nommée "HTML Grid Example" et contenant\n| Make | Model | Price |\n| ------------ | ------- | ------ |\n| Toyota | Celica | 35000 |\n| Ford | Mondeo | 32000 |\n| Porsche | Boxster | 72000 |\n| BMW | M50 | 60000 |\n| Aston Martin | DBX | 190000 |\n```
* */
(0, cypress_cucumber_preprocessor_1.Then)(`je dois voir une grille nommée {string} et contenant`, function (expectedListName, pExpectedElementsOfList) {
const expectedElementsOfList = (0, __common_1.removeHeaderSeparatorLine)(pExpectedElementsOfList);
cy.uuvFindByRole("grid", { name: expectedListName })
.uuvFoundedElement()
.should("exist")
.within(() => {
(0, __common_1.expectTableToHaveContent)(expectedElementsOfList, "gridcell");
});
});
/**
* Vérifie qu'il existe une grille arborescente (treegrid) avec le nom et les éléments spécifiés.<br/> <u>Exemple</u>\n```gherkin\nQuand je visite l'Url "https://e2e-test-quest.github.io/simple-webapp/treegrid.html"\nAlors je dois voir une liste nommée "HTML Treegrid Example" et contenant\n| Make | Model | Price |\n| ------------ | ------- | ------ |\n| Toyota | Celica | 35000 |\n| Ford | Mondeo | 32000 |\n| Porsche | Boxster | 72000 |\n| BMW | M50 | 60000 |\n| Aston Martin | DBX | 190000 |\n```
* */
(0, cypress_cucumber_preprocessor_1.Then)(`je dois voir une grille arborescente nommée {string} et contenant`, function (expectedListName, pExpectedElementsOfList) {
const expectedElementsOfList = (0, __common_1.removeHeaderSeparatorLine)(pExpectedElementsOfList);
cy.uuvFindByRole("treegrid", { name: expectedListName })
.uuvFoundedElement()
.should("exist")
.within(() => {
(0, __common_1.expectTableToHaveContent)(expectedElementsOfList, "gridcell");
});
});
/**
* Vérifie qu'il existe un tableau (table) avec le nom et les éléments spécifiés.<br/> <u>Exemple</u>\n```gherkin\nQuand je visite l'Url "https://e2e-test-quest.github.io/simple-webapp/table.html"\nAlors je dois voir un tableau nommée "HTML Table Example" et contenant\n| Company | Contact | Country |\n| ----------------------------- | ---------------- | ------- |\n| Alfreds Futterkiste | Maria Anders | Germany |\n| Centro comercial Moctezuma | Francisco Chang | Mexico |\n| Ernst Handel | Roland Mendel | Austria |\n| Island Trading | Helen Bennett | UK |\n| Laughing Bacchus Winecellars | Yoshi Tannamuri | Canada |\n| Magazzini Alimentari Riuniti | Giovanni Rovelli | Italy |\n```
* */
(0, cypress_cucumber_preprocessor_1.Then)(`je dois voir un tableau nommé {string} et contenant`, function (expectedListName, pExpectedElementsOfList) {
const expectedElementsOfList = (0, __common_1.removeHeaderSeparatorLine)(pExpectedElementsOfList);
cy.uuvFindByRole("table", { name: expectedListName })
.uuvFoundedElement()
.should("exist")
.within(() => {
(0, __common_1.expectTableToHaveContent)(expectedElementsOfList, "cell");
});
});
/**
* Vérifie l'existence d'un élément Html ayant le rôle `heading`, le [nom accessible](https://russmaxdesign.github.io/html-elements-names/) et le niveau spécifiés
* */
(0, cypress_cucumber_preprocessor_1.Then)(`je dois voir un titre nommé {string} avec le niveau {int}`, function (name, level) {
cy.uuvFindByRole("heading", { name, level })
.uuvFoundedElement()
.should("exist");
});
/**
* Vérifie des attributs Html de l'élément sélectionné
* */
(0, cypress_cucumber_preprocessor_1.Then)(`je dois voir les attributs avec valeurs suivantes`, function (expectedAttributeList) {
cy.uuvCheckContextWithinFocusedElement().then((context) => {
const elementToSelect = context.withinFocusedElement;
for (const currentIndex in expectedAttributeList.raw()) {
const attributeName = expectedAttributeList.raw()[currentIndex][0];
const attributeValue = expectedAttributeList.raw()[currentIndex][1];
elementToSelect.then((response) => {
assert.equal(response[0].getAttribute(attributeName), attributeValue);
});
}
});
});
/**
* Vérifie qu'un élément Html existe avec le sélecteur spécifié
* */
(0, cypress_cucumber_preprocessor_1.Then)(`je dois voir un élément ayant pour sélecteur {string}`, function (selector) {
cy.get(selector).should("exist");
});
/**
* Vérifie sur la page courante qu'il n'y a aucune erreur d'accessibilité [axe-core](https://github.com/dequelabs/axe-core/blob/develop/doc/rule-descriptions.md)
* */
(0, cypress_cucumber_preprocessor_1.Then)(`je ne dois pas avoir de problèmes d'accessibilité axe-core`, function () {
cy.injectUvvA11y();
cy.checkUvvA11y({
reference: a11y_1.A11yReferenceEnum.WCAG_WEB
});
});
/**
* Vérifie sur la page courante qu'il n'y a aucune erreur d'accessibilité [axe-core](https://github.com/dequelabs/axe-core/blob/develop/doc/rule-descriptions.md) de niveau critique
* */
(0, cypress_cucumber_preprocessor_1.Then)(`je ne dois pas avoir de problèmes d'accessibilité axe-core de niveau critique`, function () {
cy.injectUvvA11y();
cy.checkUvvA11y({
reference: a11y_1.A11yReferenceEnum.WCAG_WEB,
runnerOptions: {
includedImpacts: ["critical"]
}
});
});
/**
* Vérifie sur la page courante qu'il n'y a aucune erreur d'accessibilité [axe-core](https://github.com/dequelabs/axe-core/blob/develop/doc/rule-descriptions.md)avec un ou plusieurs impacts parmi : 'minor','moderate','serious','critical'
* */
(0, cypress_cucumber_preprocessor_1.Then)(`je ne dois pas avoir de problèmes d'accessibilité axe-core avec l(es) impact(s) {}`, function (impacts) {
cy.injectUvvA11y();
cy.checkUvvA11y({
reference: a11y_1.A11yReferenceEnum.WCAG_WEB,
runnerOptions: {
includedImpacts: [impacts]
}
});
});
/**
* Vérifie sur la page courante qu'il n'y a aucune erreur d'accessibilité [axe-core](https://github.com/dequelabs/axe-core/blob/develop/doc/rule-descriptions.md) [avec le ou les standards d'accessibilité](https://github.com/dequelabs/axe-core/blob/HEAD/doc/API.md#axe-core-tags)
* */
(0, cypress_cucumber_preprocessor_1.Then)(`je ne dois pas avoir de problèmes d'accessibilité axe-core avec le(s) standard(s) {}`, function (tags) {
cy.injectUvvA11y();
cy.checkUvvA11y({
reference: a11y_1.A11yReferenceEnum.WCAG_WEB,
runnerOptions: {
runOnly: {
type: "tag",
values: [tags]
}
}
});
});
/**
* Vérifie sur la page courante qu'il n'y a aucune erreur d'accessibilité [axe-core](https://github.com/dequelabs/axe-core/blob/develop/doc/rule-descriptions.md) [avec l'option](https://github.com/dequelabs/axe-core/blob/HEAD/doc/API.md#options-parameter) sur le [contexte donné](https://github.com/dequelabs/axe-core/blob/HEAD/doc/API.md#context-parameter)
* */
(0, cypress_cucumber_preprocessor_1.Then)(`je ne dois pas avoir de problèmes d'accessibilité axe-core sur le fichier json suivant de contexte {} et avec le fichier json suivant d'option {}`, function (context, option) {
cy.injectUvvA11y();
cy.fixture(context).then(context => {
cy.fixture(option).then(option => {
cy.checkUvvA11y({
reference: a11y_1.A11yReferenceEnum.WCAG_WEB,
runnerContext: context,
runnerOptions: option
});
});
});
});
/**
* Vérifie sur la page courante qu'il n'y a aucune erreur d'accessibilité [axe-core](https://github.com/dequelabs/axe-core/blob/develop/doc/rule-descriptions.md) [avec l'option](https://github.com/dequelabs/axe-core/blob/HEAD/doc/API.md#options-parameter)
* */
(0, cypress_cucumber_preprocessor_1.Then)(`je ne dois pas avoir de problèmes d'accessibilité axe-core avec le fichier json suivant d'option {}`, function (option) {
cy.injectUvvA11y();
cy.fixture(option).then(data => {
cy.checkUvvA11y({
reference: a11y_1.A11yReferenceEnum.WCAG_WEB,
runnerOptions: data
});
});
});
/**
* Vérifie sur la page courante qu'il n'y a aucune [erreur de conformité d'accessibilité](https://accessibilite.numerique.gouv.fr/methode/criteres-et-tests) avec un des référentiels : WCAG-WEB, RGAA et une des versions 4.1
* */
(0, cypress_cucumber_preprocessor_1.Then)(`je ne dois pas avoir de problèmes d'accessibilité rgaa`, function () {
cy.injectUvvA11y();
cy.checkUvvA11y({
reference: a11y_1.A11yReferenceEnum.RGAA
});
});
(0, cypress_cucumber_preprocessor_1.Then)(`je dois avoir les résultats suivants selon le référentiel rgaa`, function (expectedResult) {
cy.injectUvvA11y();
cy.checkUvvA11y({
reference: a11y_1.A11yReferenceEnum.RGAA,
expectedResult: {
value: JSON.parse(expectedResult)
}
});
});
(0, cypress_cucumber_preprocessor_1.Then)(`je dois avoir les résultats partiels suivants selon le référentiel rgaa`, function (expectedResult) {
cy.injectUvvA11y();
cy.checkUvvA11y({
reference: a11y_1.A11yReferenceEnum.RGAA,
expectedResult: {
value: JSON.parse(expectedResult),
isContainsMode: true
}
});
});
function haveKeyBoardFocused() {
return Cypress.$(":focus").length > 0;
}
function type(textToType) {
cy.uuvCheckContextWithinFocusedElement(true).then((context) => {
if (context.withinFocusedElement) {
context.withinFocusedElement.type(textToType);
}
else if (haveKeyBoardFocused()) {
cy.focused().type(textToType);
}
});
}