Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

299
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!