Cypress

#cypress #cypress-cucumber-preprocessor

Вопрос:

Я использую cypress с синтаксисом BDD (https://docs.cypress.io/api/cypress-api/spec) с приведенными ниже тестовыми примерами. (Это незавершенная работа)

Я хочу передать значение строки из строки «Затем» в строку «И».

 Scenario: Table contains correct data
    Given I am on page "status overview"
    Then the "1" row "ID" should display "1"
      And "items" column should display "1"
      And "cost" column should display "2"
    Then the "2" row "ID" should display "1"
      And "items" column should display "1"
      And "cost" column should display "2"
 

Мои шаги по определению тестов

 Then('the {string} row {string} should display {string}', (index, column, value) => {
  column = column.toLowerCase();

  cy.task('setRowId',index);
  getRow(index)
    .find(`[data-testid="${column}"]`)
    .should('have.text', value)
})


And('{string} column should display {string}',(column, value)=>{
  column = column.toLowerCase();
  var index = (cy.task('getRowId')).toString();
  // index should be loaded with correct id from previous test
  getRow(index)
    .find(`[data-testid="${column}"]`)
    .should('have.text', value)
})
 

затем я добавил пользовательские шаги cypress

 Cypress.Commands.add('setRowId',(val) => { return (rowId = val); })

Cypress.Commands.add('getRowId',() => { return rowId; })
 

Ответ №1:

Будет ли создание глобальных переменных для ваших значений работать в вашем сценарии? Что-то вроде этого:

 //create global variable
let rowId

Then('the {string} row {string} should display {string}', (index, column, value) => {
  column = column.toLowerCase();

  //assign value to global variable
  rowId = index
  getRow(index)
    .find(`[data-testid="${column}"]`)
    .should('have.text', value)
})


And('{string} column should display {string}',(column, value)=>{
  column = column.toLowerCase()
  // assign value of global variable to index or use the global vriable itself
  index = rowId
  getRow(index)
    .find(`[data-testid="${column}"]`)
    .should('have.text', value)
})
 

Ответ №2:

Я думаю, тебе нужен псевдоним

 Then('the {string} row {string} should display {string}', (index, column, value) => {
  column = column.toLowerCase();

  cy.wrap(index).as('rowId')
  getRow(index)
    .find(`[data-testid="${column}"]`)
    .should('have.text', value)
})


And('{string} column should display {string}',(column, value)=>{
  column = column.toLowerCase();

  cy.get('@rowId')).then(rowId => {
    // rowId should be loaded with correct id from previous test
    getRow(rowId)
      .find(`[data-testid="${column}"]`)
      .should('have.text', value)
  });
})