cy.url () и / или cy.location ('href') не возвращает строку - PullRequest
0 голосов
/ 27 июня 2019

У меня есть страница редактора. Когда я добавляю какой-либо контент и нажимаю кнопку «Сохранить», мой URL изменится, добавив в него случайный идентификатор. Я хочу проверить, меняются ли мои идентификаторы каждый раз, когда я нажимаю кнопку «Сохранить».

Я сохраняю результат URL в переменной и хочу его проверить, я делаю это так:

const currentURL = cy.url();
cy.get('.editor-toolbar-actions-save').click();
cy.url().should('not.eq', currentURL);

Но тип моей currentURL переменной не является строкой:

ожидается http://localhost:8080/editor/37b44d4d-48b7-4d19-b3de-56b38fc9f951 не равно {Object (chainerId, firstCall)}

Как я могу использовать мою переменную?

Ответы [ 2 ]

2 голосов
/ 27 июня 2019

ТЛ; др

Команды Cypress являются асинхронными, для работы с их выходами необходимо использовать then.

const currentURL = null
cy.url().then(url => {
  currentURL = url;
});
cy.get('.editor-toolbar-actions-save').click();
cy.url().should('not.eq', currentURL);

Объяснение

Аналогичный вопрос был задан на GitHub , а официальный документ об псевдонимах объясняет это явление очень подробно:

Вы не можете назначать или работать с возвращаемыми значениями любой команды Cypress. Команды поставлены в очередь и выполняются асинхронно.

Также показано решение:

Для доступа к тому, что дает каждая команда Cypress, вы используете .then().

cy.get('button').then(($btn) => {
  // $btn is the object that the previous
  // command yielded us
})

Также полезно ознакомиться с разделом об основных понятиях документации по асинхронности .

2 голосов
/ 27 июня 2019

Эти команды возвращают цепочечный тип, а не примитивные значения, такие как строки, поэтому назначение их переменным потребует дополнительных действий для «извлечения» строки.

Чтобы получить строку URL-адреса, необходимо выполнить

cy.url().then(urlString => //do whatever)
...