Метод, который вы используете, не рекомендуется кипарисом и считается анти-паттерном.https://docs.cypress.io/guides/references/best-practices.html#Assigning-Return-Values
Cypress рекомендует добавлять пользовательские команды.https://docs.cypress.io/api/cypress-api/custom-commands.html#Syntax
В изначально созданной структуре папок файл commands.js находится в папке поддержки.Здесь вы можете создать команду, которая включает в себя логику, которую вы хотите использовать повторно.Основываясь на части console.log вашего кода, я предполагаю, что он запускается из командной строки.Есть пользовательские команды для консоли, а также для использования в пользовательском интерфейсе.
для этой части вам, возможно, придется добавить эту пользовательскую команду
// not a super useful custom command
// but demonstrates how subject is passed
// and how the arguments are shifted
Cypress.Commands.add('console', {
prevSubject: true
}, (subject, method) => {
// the previous subject is automatically received
// and the commands arguments are shifted
// allow us to change the console method used
method = method || 'log'
// log the subject to the console
console[method]('The subject is', subject)
// whatever we return becomes the new subject
//
// we don't want to change the subject so
// we return whatever was passed in
return subject
})
Для других функций создание команд довольнопростой, основной шаблон:
Cypress.Commands.add(name, callbackFn)
, поэтому вы можете потенциально создать что-то вроде
Cypress.Commands.add(allNameBeforeInput, (options, options) => {
//custom logic goes here
})
Затем вы можете использовать его, вызвав cy.allNameBeforeInput (options, options).
Например, я боролся со входом в систему, и во всех моих тестах были функции входа в систему для входа через пользовательский интерфейс, но я хотел начать свои тесты на правильной странице вместо страницы входа в систему.Я добавил это в файл command.js в папке поддержки:
Cypress.Commands.add('login',(username="notsharingmyusernam@stackexchange.com",
password="somesecurepasswordshhh") => {
cy.request({
method: "POST",
url: "/api/public/login",
body: `{:person/email "${username}", :person/password "${password}"}`,
headers: {
"Accept": "application/edn",
"Content-Type": "application/edn"
}
})
})
И теперь я могу добавить cy.login и функцию beforeEach в начале моих тестов.Перед каждым отправлять запрос на сервер и ждать запроса на вход в систему и настраиваемую команду cy.login, чтобы убедиться, что я могу использовать эту объединенную логику только с одной командой cy.
describe('Test suite for page traverse', () => {
beforeEach(() => {
cy.server()
cy.route("POST","/api/graphql").as("graphql")
Cypress.Cookies.preserveOnce("company_jwt_qa")
})
it('traverses all subnav items', () => {
cy.login()
cy.visit('/index.html')
cy.wait("@graphql")
cy.get('[data-tag-component="subnav-group"]')
cy.get('[data-tag-component="subnav-title"]').eq(1).click()
})
})