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

303
Vistas
Enfoque de ciprés POM | Cómo leer datos de accesorios en el archivo POM_Page.js en cypress

Soy nuevo en Cypress y trato de crear un marco en POM. He seguido estos pasos para crear el marco.

  1. Repositorio de objetos creado con un archivo llamado 'locators.json' , los datos en ese archivo se ven así
 { "RxClaims_LoginPage": { "UserName":"#f0", "Password":"#f1", "SignInButton":"#xlg0003" } }
  1. En Integración>Ejemplos, he creado pruebas denominadas OR_Approch.js que se parecen a
 /// <reference types="Cypress" /> import ORLoginPage from '../PageObjects/OR_Login' describe('OR_Approach',function(){ it('RxClaimsLogin', function() { const login = new ORLoginPage(); cy.visit('/') cy.wait(2000) login.EnterData_In_UserName() login.Password() login.SignInButton() }) })

3. Y he creado otra carpeta en Integración> POM que consta de todos los POM, uno de ellos llamado OR_Login.js parece

 class ORLoginPage{ EnterData_In_UserName() { cy.fixture('example').then(function (dataJson) { this.testData = dataJson; }) cy.fixture('locators').then(function (oRdata) { this.objRep = oRdata; }) cy.enterDatainTextBox(this.objRep.RxClaims_LoginPage.UserName,this.testData.UserName) return this } Password(){ return 'cy.enterDatainTextBox(this.objRep.RxClaims_LoginPage.Password,this.testData.Password)' } SignInButton(){ return 'cy.clickOnObject(this.objRep.RxClaims_LoginPage.SignInButton)' } } export default ORLoginPage;
  1. Bajo Support commands.js consiste en métodos personalizados que se ven así
 Cypress.Commands.add('enterDatainTextBox', (textBoxElePath, textValue) => { cy.get(textBoxElePath).type(textValue) })

Entonces, mi pregunta es: quiero acceder a los datos de locators.js para todas las funciones en OR_Login.js . Probé el método beforeEach para archivos de prueba que funciona bien, pero cuando lo uso en cualquier clase como OR_Login.js no funciona. Sugiera alguna forma para que los datos de los dispositivos se puedan leer en los archivos de clase POM.

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

La forma beforeEach() no funcionará en OR_Login.js porque no es un archivo de prueba y mocha no está ejecutando ese archivo.

En su lugar, simplemente puede importar el archivo JSON como una variable a OR_Login.js y usar esa variable.

 // OR_Login.js const locators = require('./path/to/locators.json'); class ORLoginPage { ... Password(){ return cy.enterDatainTextBox(locators.RxClaims_LoginPage.Password,locators.Password) } ... }

Si tiene datos dinámicos que cambiarán en función de la clase, también podría crear su clase con un constructor que apuntaría a los datos correctos en el archivo locators.json .

Habiendo dicho todo eso, Cypress le recomienda encarecidamente que no use POM con Cypress. Si elige continuar usando el POM con Cypress, le recomiendo encarecidamente que todas las funciones que ejecute en una prueba estén contenidas dentro de la clase que ejecuta el código (en lugar de mezclar cy. y su clase en la prueba), así como ver cómo puede encadenar mejor su comando entre sí, para que se ejecuten en la misma cadena de comando de Cypress.

about 4 years ago · Juan Pablo Isaza Denunciar

0

El problema de usar POM con Cypress es que funciona contra los ganchos de Mocha como beforeEach() , que son muy útiles para pruebas legibles.

Pero las clases tienen constructores que podrían usarse para llenar su this.testData .

 class ORLoginPage{ constructor() { cy.fixture('example').then(function (dataJson) { this.testData = dataJson; }) cy.fixture('locators').then(function (oRdata) { this.objRep = oRdata; }) } EnterData_In_UserName() { cy.enterDatainTextBox(this.objRep.RxClaims_LoginPage.UserName, this.testData.UserName) return this } Password() { ... } SignInButton(){ ... } } export default ORLoginPage;

El cy.fixture() es asíncrono porque lee un archivo, por lo que puede ser mejor usar un método init() .

Esto será útil para cualquier comando asíncrono que tenga en el POM.

 class ORLoginPage{ init() { return new Promise((resolve, reject) => { cy.fixture('example').then(function (exampleData) { this.testData = exampleData cy.fixture('locators').then(function (locatorData) { this.objRep = locatorData; resolve(true) }) }) } } ...
 /// <reference types="Cypress" /> import ORLoginPage from '../PageObjects/OR_Login' describe('OR_Approach',function(){ it('RxClaimsLogin', async function() { // add async to the test const login = new ORLoginPage(); await login.init() cy.visit('/') cy.wait(2000) login.EnterData_In_UserName() login.Password() await login.SignInButton() // may be useful to await other async methods }) })
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