посещение
Посетите удалённый URL.
Лучшая практика
Мы рекомендуем установить
baseUrlпри использованииcy.visit().Подробнее о лучших практиках здесь.
Синтаксис
cy.visit(url)
cy.visit(url, options)
cy.visit(options)
Использование
Правильное использование
cy.visit('/') // visits the baseUrl
cy.visit('index.html') // visits the local file "index.html" if baseUrl is null
cy.visit('http://localhost:3000') // specify full URL if baseUrl is null or the domain is different the baseUrl
cy.visit({
url: '/pages/hello.html',
method: 'GET',
})
Аргументы
url (Строка)
URL для посещения.
Cypress добавит префикс к URL с baseUrl, настроенным в вашей глобальной конфигурации, если он установлен.
Если baseUrl не установлен, вам нужно указать полностью квалифицированный URL, иначе Cypress попытается действовать как ваш веб-сервер. Подробнее см. примечания о префиксах.
Примечание: посещение нового домена требует перезагрузки окна Test Runner. Вы не можете посещать разные супердомены в одном тесте.
options (Объект)
Передайте объект options для управления поведением cy.visit().
По умолчанию команды cy.visit() будут использовать pageLoadTimeout и baseUrl , заданные глобально в вашей конфигурации.
| Опция | Значение по умолчанию | Описание |
|---|---|---|
url |
null |
URL для посещения. Это значение будет добавлено к baseUrl , если он настроен. Ведёт себя так же, как аргумент url |
method |
GET |
HTTP-метод для использования при посещении. Может быть GET или POST. |
body |
null |
Необязательное тело для отправки вместе с запросом POST. Если это строка, она будет передана без изменений. Если это объект, он будет закодирован в URL и отправлен с заголовком Content-Type: application/x-www-urlencoded. |
headers |
{} |
Объект, сопоставляющий имена заголовков HTTP со значениями, которые будут отправлены вместе с запросом. Примечание: headers будет отправлен только для начального запроса cy.visit(), а не для последующих запросов. |
qs |
null |
Параметры запроса для добавления к url запроса |
log |
true |
Отображает команду в Журнале команд |
auth |
null |
Добавляет заголовки Basic Authorization |
failOnStatusCode |
true |
Вызывать ошибку при кодах ответа, отличных от 2xx и 3xx |
onBeforeLoad |
function |
Вызывается, прежде чем ваша страница загрузит все свои ресурсы. |
onLoad |
function |
Вызывается после того, как ваша страница сработает событие загрузки. |
retryOnStatusCodeFailure |
false |
Следует ли Cypress автоматически повторно пытаться исправить ошибки статуса кода внутри. Cypress будет повторно пытаться выполнить запрос до 4 раз, если это значение установлено в true. |
retryOnNetworkFailure |
true |
Следует ли Cypress автоматически повторно пытаться исправить временные сетевые ошибки внутри. Cypress будет повторно пытаться выполнить запрос до 4 раз, если это значение установлено в true. |
timeout |
pageLoadTimeout |
Время ожидания, чтобы cy.visit() разрешилось, прежде чем произойдёт таймаут. Примечание: сетевые запросы ограничены базовой операционной системой и могут все еще завершиться с таймаутом, если это значение увеличено. |
Вы также можете установить все команды cy.visit() , pageLoadTimeout и baseUrl глобально в конфигурации.
Возвращаемые значения
-
cy.visit()'возвращает объектwindowпосле завершения загрузки страницы'
Давайте проверим window.navigator.language после посещения сайта:
cy.visit('/') // yields the window object
.its('navigator.language') // yields window.navigator.language
.should('equal', 'en-US') // asserts the expected value
Примеры
URL
Посещение локального сервера, работающего по адресу http://localhost:8000
cy.visit() разрешается, когда удалённая страница запускает событие load.
cy.visit('http://localhost:8000')
Опции
Изменение таймаута по умолчанию
Переопределяет pageLoadTimeout , установленный глобально в вашей конфигурации для этой загрузки страницы.
// Wait 30 seconds for page 'load' event
cy.visit('/index.html', { timeout: 30000 })
Добавление заголовков basic auth
Cypress автоматически применяет правильные заголовки авторизации, если вы пытаетесь посетить приложение, которое требует Basic Authentication.
Укажите username и password в объекте auth. Тогда все последующие запросы, соответствующие источнику, который вы тестируете, будут иметь эти значения, прикреплённые на уровне сети.
cy.visit('https://www.acme.com/', {
auth: {
username: 'wile',
password: 'coyote',
},
})
Вы также можете указать имя пользователя и пароль непосредственно в URL.
// this is the same thing as providing the auth object
cy.visit('https://wile:coyote@www.acme.com')
Cypress автоматически прикрепит этот заголовок на уровне сетевого прокси-сервера, вне браузера. Поэтому вы не увидите этот заголовок в Dev Tools.
Предоставить функцию обратного вызова onBeforeLoad
onBeforeLoad вызывается как можно скорее, прежде чем ваша страница загрузит все свои ресурсы. Ваши скрипты ещё не будут готовы, но это отличный крючок для потенциального изменения страницы.
cy.visit('http://localhost:3000/#dashboard', {
onBeforeLoad: (contentWindow) => {
// contentWindow is the remote page's window object
},
})
Посмотрите примеры рецептов, использующие опцию
cy.visit()'sonBeforeLoad:
Предоставить функцию обратного вызова onLoad
onLoad вызывается после того, как ваша страница сработает событие load. Все скрипты, таблицы стилей, HTML и другие ресурсы гарантированно будут доступны на этом этапе.
cy.visit('http://localhost:3000/#/users', {
onLoad: (contentWindow) => {
// contentWindow is the remote page's window object
if (contentWindow.angular) {
// do something
}
},
})
Добавление параметров запроса
Вы можете предоставить параметры запроса в виде объекта к cy.visit() передав qs в options.
// visits http://localhost:3500/users?page=1&role=admin
cy.visit('http://localhost:3500/users', {
qs: {
page: '1',
role: 'admin',
},
})
Параметры, переданные в qs , будут объединены с существующими параметрами запроса на url.
// visits http://example.com/users?page=1&admin=true
cy.visit('http://example.com/users?page=1', {
qs: { admin: true },
})
Отправка формы
Чтобы отправить запрос, похожий на отправку пользователем HTML-формы, используйте метод POST с объектом body, содержащим значения формы:
cy.visit({
url: 'http://localhost:3000/cgi-bin/newsletterSignup',
method: 'POST',
body: {
name: 'George P. Burdell',
email: 'burdell@microsoft.com',
},
})
Примечания
Префиксы
Посещение автоматически добавляет префикс baseUrl
Cypress добавит префикс к URL с baseUrl , если он был установлен. Мы рекомендуем настроить baseUrl в вашем файле конфигурации (по умолчанию cypress.json) для предотвращения повторения в каждой команде cy.visit().
{
"baseUrl": "http://localhost:3000/#/"
}
cy.visit('dashboard') // Visits http://localhost:3000/#/dashboard
Если вам нужно посетить другой хост, когда baseUrl установлен, укажите полностью квалифицированный URL, который вы хотите посетить.
cy.visit('http://google.com')
Посещение локальных файлов
Cypress автоматически попытается обработать ваши файлы, если вы не укажете хост, и baseUrl не определено. Путь должен быть относительным к корневой папке вашего проекта (по умолчанию там, где генерируется файл cypress.json).
Использование Cypress для обработки ваших файлов удобно в небольших проектах и приложениях-примерах, но не рекомендуется для приложений в производстве. Всегда лучше запустить собственный сервер и предоставить Cypress URL.
cy.visit('app/index.html')
Посещение локального файла, когда baseUrl установлен
Если у вас установлен baseUrl, но вам нужно посетить локальный файл в одном тесте или группе тестов, установите baseUrl на null, используя конфигурацию теста. Учитывая наш файл cypress.json:
{
"baseUrl": "https://example.cypress.io"
}
Первый тест посещает baseUrl, а второй — локальный файл.
it('visits base url', () => {
cy.visit('/')
cy.contains('h1', 'Kitchen Sink')
})
it('visits local file', { baseUrl: null }, () => {
cy.visit('index.html')
cy.contains('local file')
})
Перенаправления
Посещение автоматически перенаправляет
// we aren't logged in, so our web server
// redirected us to /login
cy.visit('http://localhost:3000/admin')
cy.url().should('match', /login/)
Протокол
Протокол может быть опущен для распространённых хостов
Cypress автоматически добавляет протокол http:// к распространённым хостам. Если вы не используете один из этих 3 хостов, убедитесь, что вы указали протокол.
cy.visit('localhost:3000') // Visits http://localhost:3000
cy.visit('0.0.0.0:3000') // Visits http://0.0.0.0:3000
cy.visit('127.0.0.1:3000') // Visits http://127.0.0.1:3000
Окно
Посещение всегда возвращает объект окна удаленной страницы window при разрешении
cy.visit('index.html').then((contentWindow) => {
// contentWindow is the remote page's window object
})
Пользовательский агент
Попытка изменить User-Agent? Вы можете установить userAgent в качестве значения конфигурации в вашем файле конфигурации в данном файле.
Маршрутизация
Предотвращение запросов до первоначальной загрузки удаленной страницы
Один из распространённых сценариев, поддерживаемых Cypress, — это посещение удалённой страницы и предотвращение отправки любых запросов Ajax сразу же.
Вы можете подумать, что это работает:
// this code may not work depending on implementation
cy.visit('http://localhost:8000/#/app')
cy.intercept('/users/**', { fixture: 'users' })
Но если ваше приложение отправляет запрос при инициализации, вышеуказанный код не сработает. cy.visit() разрешится, когда сработает событие load. Команда cy.intercept() не обрабатывается до после разрешения cy.visit().
Многие приложения начнут маршрутизацию, инициализацию и запросы к тому времени, когда cy.visit() в приведенном выше коде разрешится. Поэтому создание маршрута cy.intercept() произойдёт слишком поздно, и Cypress не обработает запросы.
К счастью, Cypress поддерживает этот случай. Поменяйте порядок команд:
// this code is probably what you want
cy.intercept('/users/**', {...})
cy.visit('http://localhost:8000/#/app')
Cypress автоматически применит маршруты к следующему cy.visit() и сделает это непосредственно перед выполнением любого вашего кода приложения.
Правила
Требования
-
cy.visit()требует привязки кcy. -
cy.visit()требует, чтобы ответ былcontent-type: text/html. -
cy.visit()требует, чтобы код ответа был2xxпосле переадресации. -
cy.visit()требует, чтобы событие загрузкиloadв конечном итоге сработало.
Утверждения
-
cy.visit()автоматически будет ждать, пока утверждения, которые вы привязали, пройдут
Таймауты
-
cy.visit()может приостановиться, ожидая, пока страница не вызовет событиеload. -
cy.visit()может приостановиться, ожидая, пока утверждения, которые вы добавили, не пройдут.
Журнал команд
Пример приложения Visit в beforeEach
beforeEach(() => {
cy.visit('https://example.cypress.io/commands/viewport')
})
Приведённые выше команды будут отображаться в журнале команд как:
При нажатии на visit в журнале команд консоль выведет следующее:
История
| Версия | Изменения |
|---|---|
| 3.5.0 | Добавлена поддержка опций qs
|
| 3.3.0 | Добавлена поддержка опций retryOnStatusCodeFailure и retryOnNetworkFailure
|
| 3.2.0 | Добавлены опции url, method, body, и headers
|
| 1.1.3 | Добавлена опция failOnStatusCode
|
| 0.18.2 | Автоматическая отправка заголовка запроса Accept: text/html,*/* |
| 0.18.2 | Автоматическая отправка заголовка User-Agent |
| 0.17.0 | Невозможно cy.visit() два разных домена верхнего уровня в одном тесте |
| 0.6.8 | Добавлена опция log
|
| 0.4.3 | Добавлена опция onBeforeLoad
|
| < 0.3.3 |
Добавлена команда cy.visit() |
См. также
© 2017 Cypress.io
Licensed under the MIT License.
https://docs.cypress.io/api/commands/visit