Me pregunto si es posible pasar localizadores como parámetro para que mi función sea reutilizable. Traté de hacerlo yo mismo, pero me estoy volviendo "indefinido" en lugar de una prueba de trabajo. Error de Cypress: cy.click() falló porque requiere un elemento DOM. El tema recibido fue:
indefinido
Mi código:
Cypress.Commands.add( "commandName", (locator, chartValue1) => { const chartValues = [150, 250, 350, 450, 550, 750, 900]; for (const value of chartValues) { locator.click(value, chartValue1).then(() => { mainElementsPage .mainSideBarHeader() .should("not.include.text", "(pon.)") .should("not.include.text", "(wt.)") .should("not.include.text", "(śr.)"); }); } } );Estoy usando este comando en la prueba:
it("should do something", () => { cy.commandName(mainElementsPage.chartRect(), 200); });Contenido de la página de elementos principales:
class mainElementsPage { chartRect() { return cy.get("#chart-grid-rect"); } } export default mainElementsPage;Parece que quieres hacer un comando secundario .
Lo que precede a su comando personalizado se pasa como subject (equivalente a locator )
Cypress.Commands.add("commandName", {prevSubject: true}, (subject, chartValue1) => { const chartValues = [150, 250, 350, 450, 550, 750, 900]; for (const value of chartValues) { subject.click(value, chartValue1).then(() => { mainElementsPage.mainSideBarHeader() .should("not.include.text", "(pon.)") .should("not.include.text", "(wt.)") .should("not.include.text", "(śr.)"); }); } } ) cy.get("#chart-grid-rect").commandName(200); // or mainElementsPage.chartRect().commandName(200); class MainElementsPage { chartRect() { return cy.get("#chart-grid-rect"); } } export default new MainElementsPage; // note - new keyword herePara asegurarse de que puede usar mainElementsPage , primero debe importar este archivo a su prueba de esta manera:
import mainElementsPage from '../<some path>/mainElementsPage.js'Entonces tienes que crear un objeto para esto, como
const mainElements = new mainElementsPage();Entonces puedes usarlo como:
mainElements.chartRect()En Cypress, es imposible tener 2 cadenas de comando activas simultáneamente. Por lo tanto, no puede pasar una cadena de comandos a otro comando (incluido un comando personalizado como lo hace). Así que veo 4 formas diferentes de cómo puede solucionar el problema: