#node.js #cookies #mocha.js #ui-automation #cypress
#node.js #файлы cookie #mocha.js #пользовательский интерфейс-автоматизация #cypress
Вопрос:
Cypress не вернул данные поиска или не сохранил результаты поиска при переключении на другую страницу, которая также должна сохранять и отображать данные.
Когда я выполняю некоторый автоматизированный вариант использования cypress на моем локальном компьютере для получения результатов поиска, он должен возвращать данные, но что-то не так в случаях, когда cypress обрабатывает данные для новых экранов.
Ниже приведены протестированные варианты использования: 1. переход к главному экрану 2. переключение на другую учетную запись 3. поиск допустимого порядка, существующего в базе данных
Фактический результат Cypress: сервер не вернул никаких данных, на самом деле я заметил, что запрос отправляется учетной записи по умолчанию, а не ожидаемой.
Фактический результат вне сеанса cypress: данные возвращаются нормально для ожидаемой учетной записи.
Код, включающий предварительные условия для обработки сеансовых файлов cookie для запоминания переключенной учетной записи для всех запросов (utils.auth_handler) —
let server_auth_url = Cypress.env('server') urls.server_auth;
cy.request('POST', server_auth_url, currentUser);
Cypress.Cookies.preserveOnce('session_id', 'remember_token');
Тестовый сценарий полного обращения:
import * as loc from '../support/locators';
import * as urls from '../support/urls';
import * as utils from '../support/utils';
import { quick_login } from '../support/init.js';
describe('WebApp - Orders', function() {
beforeEach(() => {
utils.auth_handler();
});
before(() => {
quick_login();
});
it('Orders - data loading time',function() {
cy.visit(urls.expand_data_orders);
cy.get(loc.switch_to_orders).click();
cy.get(loc.graphs,{ timeout: 5000 }).should('be.visible');
cy.get(loc.orders_table,{ timeout: 5000 }).should('be.visible');
cy.get(loc.data_summary,{ timeout: 5000 }).should('be.visible');
});
it('Orders - Search data validation', function () {
cy.get(loc.order_results_row).first().then(($id_value) => {
// store the button's text
let txt = $id_value.text();
cy.log(txt);
cy.get(loc.search_field).type(txt '{enter}');
})
});
});
Мой главный вопрос заключается в том, как справиться с этим вариантом использования при смене учетных записей и хочу использовать новую переключенную учетную запись по умолчанию для любого запроса сервера / Что не так с моим текущим кодом?
Спасибо.
Комментарии:
1. По умолчанию Cypress очищает сеанс после шага тестирования (после каждого
it
). ИспользованиеCypress.Cookies.preserveOnce('session_id', 'remember_token');
сохранит информацию о сеансе между тестами. Не уверен, что это может соответствовать вашим потребностям в переключении учетной записи.2. @KondasamyJayaraman Спасибо за ваш комментарий, у вас есть какие-либо идеи, что может быть альтернативой для этого варианта использования вместо ‘cookies.preserveOnce’?
3. Поскольку вы хотите имитировать многопользовательские тесты, я бы посоветовал вам удалить упомянутую строку. Cypress должен автоматически обрабатывать новые пользовательские сеансы.