Моя страница содержит форму, в которой пользователь может ввести свое имя:
<form method="post" onsubmit="nameSubmitted()">
<input id="nameField" name="username" type="text" autofocus>
<input type="hidden" name="form" value="username">
<input id="nameSubmitButton" type="submit" value="OK">
</form>
В Cypress я делаю:
cy.visit('http://localhost:8080/my-page-name.html');
cy.get('[id="nameField"]')
.type(my-test-username);
cy.get('[id="nameSubmitButton"]')
.click();
Предполагаемое поведение состоит в том, что сервер связывает данное имя пользователя для текущего сеанса, и пользователь остается на той же странице, а функция nameSubmitted()
отображает и скрывает некоторые элементы DOM. Это прекрасно работает при ручном тестировании с обычным экземпляром Firefox, Chrome, Opera или Brave, но не удается, когда Cypress пытается сделать то же самое в Electron или Firefox (я не смог добавить другие браузеры Cypress, но это отдельная проблема).
Сервер является первым HTTP-сервером, который я написал, поэтому я не уверен на 100%, что его поведение правильное, но я не могу найти ничего неправильного. Он написан на Java с использованием com.sun.net.httpserver.HttpServer
и связанных классов, и я попробовал два разных ответа на запрос POST:
204
Нет содержимого
В экземпляре com.sun.net.httpserver.HttpExchange
я звоню:
aHttpExchange.sendResponseHeaders(204, -1);
aHttpExchange.getResponseBody().close();
Это приводит к зависанию Cypress в ожидании загрузки страницы до истечения времени ожидания через 60 секунд. На самом деле нет ничего нового в том, что он должен загружаться, и изображение страницы справа от экземпляра браузера Cypress показывает, что страница отображается правильно (функция nameSubmitted()
корректно изменила DOM). Я также вижу на сервере, что запрос POST успешен и имя пользователя установлено.
200
OK
Как и следовало ожидать, я попытался вместо этого установить
aHttpExchange.sendResponseHeaders(200, 0);
и отправить пустую строку в OutputStream перед его закрытием. Это заставляет Cypress (и обычные браузеры, когда он не находится в тестовом режиме) устанавливать эту пустую строку в качестве содержимого страницы, так что это не годится.
В соответствии с http spe c:
Действие, выполняемое методом POST, может не привести к ресурсу, который может быть идентифицирован по URI. В этом случае либо 200 (ОК), либо 204 (Нет содержимого) - это соответствующий статус ответа, в зависимости от того, содержит ли ответ объект, описывающий результат.
Так что кажется, что мой сервер должен делать правильно с ответом (1).
Кто-нибудь знает, почему происходит тайм-аут?