Cypress — функции импорта и экспорта

#javascript #function #automation #cypress

Вопрос:

Как я могу лучше организовать свой код cypress для тестирования, чтобы мне нужно было импортировать только некоторые функции?

Я хочу начать с создания файла для аутентификации на странице, а затем я хочу импортировать его в тест с несколькими функциями.

Я попробовал следующий код экспорта, и он, похоже, был неверным, с ошибками:

 export function login() {
    cy.visit('https://*********')
    cy.get('input[name="Parameter.UserName"]').type('*****')
    cy.get('input[name="Parameter.Password"]').type('*****')
    cy.contains('Login').click()

}

export default {login};
 

И в тесте :

 import {login} from 'elements/pages/login.js'
 

Ответ №1:

Cypress предоставляет для этой цели нечто, называемое пользовательскими командами, вы можете прочитать об этом здесь.

Перейдите cypress/support/commands.js и напишите весь свой код здесь, как:

 Cypress.Commands.add('login', () => {
  cy.visit('https://*********')
  cy.get('input[name="Parameter.UserName"]').type('*****')
  cy.get('input[name="Parameter.Password"]').type('*****')
  cy.contains('Login').click()
})
 

А затем в любом из ваших тестов вы можете напрямую добавить:

 cy.login()
 

Комментарии:

1. Отлично , спасибо вам! Есть ли какой-нибудь способ не вводить все команды в commands.js и как-то организовать их на страницах (например, страница Календаря с некоторыми командами, страница настроек с другими командами, страница бронирования с другими командами)?

2. Да, способ есть. Вы можете создавать отдельные файлы js в любом месте проекта, а затем добавлять путь к файлу cypress/support/index.js , например. Предположим, у меня есть файл login.js в integration/utils папке, все, что мне нужно сделать, это добавить import '../integration/utils/login.js' cypress/support/index.js файл, и он будет работать.

3. Если у меня есть «Кипарис. Команды.добавить(‘войти’, () => { })», могу ли я выполнить несколько шагов в этом тесте? я имею в виду несколько шагов с описанием каждого

Ответ №2:

Для импорта требуется относительный URL-адрес

 import {login} from '../elements/pages/login.js'  // relative from cypress/integration
 

или если под cypress/suport/elements

 import {login} from '../support/elements/pages/login.js'  
 

Абсолютный импорт (где путь не имеет ведущего ./ или ../) предполагается, что это библиотечные пакеты node_modules .