Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

307
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda