Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

305
Vistas
¿Cómo pasar localizador como parámetro en ciprés?

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;
about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

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 here
about 4 years ago · Juan Pablo Isaza Denunciar

0

Para 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()
about 4 years ago · Juan Pablo Isaza Denunciar

0

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:

  1. Use una función simple en lugar de un comando personalizado. Entonces podrá pasar una cadena desde su objeto POM.
  2. Devuelva un localizador de cadenas en lugar de una cadena de su objeto POM
  3. Use un comando secundario y encadene su lógica (vea la respuesta de @ Fody).
  4. Pase una referencia de función que apunte a su función de objeto POM y llame a esta función dentro del comando personalizado (vea la respuesta de @wojnarto).
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda