Сохранение файлов cookie / сеанса localStorage в тестах Cypress - PullRequest
0 голосов
/ 22 мая 2018

Я хочу сохранить / сохранить / сохранить файл cookie или токен localStorage, установленный cy.request () , чтобы мне не приходилось использовать пользовательскую команду для входа в каждый тест,Это должно работать для токенов, подобных jwt (веб-токены json), которые хранятся в локальном хранилище клиента.

Ответы [ 3 ]

0 голосов
/ 08 ноября 2018

Вот полезная ссылка, которая решает мою проблему, например вашу: Сохранение файлов cookie с помощью нескольких тестов

мой код вроде:

const login = () => {
    cy.visit('http://0.0.0.0:8080/#/login');
    cy.get('#username').type('username');
    cy.get('#password').type('1234password$');
    cy.get('#login-button').click();
}

describe('UI', () => {
  // beforeEach(login);
    beforeEach(() => {
        login();
        Cypress.Cookies.preserveOnce('session_id', 'remember_token');
  });

});

надеюсь, может помочь вам.

0 голосов
/ 19 марта 2019

Чтобы обновить эту ветку, уже есть лучшее решение для сохранения файлов cookie (автор @bkucera);но теперь существует обходной путь для сохранения и восстановления локального хранилища между тестами (в случае необходимости).Я недавно столкнулся с этой проблемой;и нашел, что это решение работает.

Это решение заключается в использовании вспомогательных команд и их использовании внутри тестов,

Внутри - cypress/support/<some_command>.js

let LOCAL_STORAGE_MEMORY = {};

Cypress.Commands.add("saveLocalStorage", () => {
  Object.keys(localStorage).forEach(key => {
    LOCAL_STORAGE_MEMORY[key] = localStorage[key];
  });
});

Cypress.Commands.add("restoreLocalStorage", () => {
  Object.keys(LOCAL_STORAGE_MEMORY).forEach(key => {
    localStorage.setItem(key, LOCAL_STORAGE_MEMORY[key]);
  });
});

Затем в тесте,

beforeEach(() => {
  cy.restoreLocalStorage();
});

afterEach(() => {
  cy.saveLocalStorage();
});

Ссылка: https://github.com/cypress-io/cypress/issues/461#issuecomment-392070888

0 голосов
/ 22 мая 2018

Из Cypress Документы

Для постоянных файлов cookie : по умолчанию Cypress автоматически очищает все файлы cookie перед каждым тестом, чтобы предотвратить создание состояния.

Вы можете сохранить определенные cookie-файлы в белом списке для всех тестов, используя API Cypress.Cookies:

// now any cookie with the name 'session_id' will
// not be cleared before each test runs
Cypress.Cookies.defaults({
  whitelist: "session_id"
})

Для сохранения localStorage : он не встроен в банкомат, но вы можете его достичьвручную прямо сейчас, потому что метод, который очищает локальное хранилище, публично представлен как Cypress.LocalStorage.clear.

Вы можете сделать резервную копию этого метода и переопределить его на основе отправленных ключей.

const clear = Cypress.LocalStorage.clear

Cypress.LocalStorage.clear = function (keys, ls, rs) {
  // do something with the keys here
  if (keys) {
    return clear.apply(this, arguments)
  }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...