#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)
});
})