Страница загрузилась, но действие ещё не закончено
Возврат управления после перехода на страницу не гарантирует завершения всех последующих изменений, запускаемых её скриптами. Поле может появиться позже, кнопка оставаться недоступной, а результат сохранения прийти после отдельного запроса. Тесту нужно ждать то состояние, от которого зависит следующий шаг. Например, наличие кнопки в структуре страницы не означает успешного сохранения заметки. Даже доступность кнопки описывает возможность попытаться выполнить действие, а не его итог. Поэтому сценарий полезно разделять: подготовить исходное состояние, выполнить действие, дождаться наблюдаемого результата и проверить его соответствие ожиданию.
Явное ожидание связывает паузу с условием
В Selenium для Java объект WebDriverWait позволяет задавать ожидание условия с ограничением времени. Проверки повторяются, пока условие не выполнится или не истечёт установленный предел. Это отличается от фиксированной паузы: если нужное состояние возникло раньше, тест может продолжить работу раньше. Предел ожидания выбирают осмысленно для проверяемого процесса. Его увеличение не исправляет неверный указатель элемента и не создаёт отсутствующий результат. Смешивание неявных и явных ожиданий способно сделать длительность менее предсказуемой. В условии ожидания особенно важно избегать повторного действия, которое меняет данные: многократное нажатие сохранения может породить несколько заметок вместо проверки одной.
Нужен результат именно текущего действия
Представим, что сообщение об успехе осталось от предыдущего сохранения. Проверка одного его присутствия может пройти мгновенно, хотя новая заметка ещё не сохранена. Более содержательный критерий связывает результат с текущими данными: например, в списке появилась заметка с заранее выбранным уникальным учебным названием. Такой критерий всё равно следует согласовать с назначением теста. Видимая строка подтверждает состояние интерфейса, но не обязательно доказывает долговременное хранение после повторного открытия. Если требуется проверить сохранность, это отдельный шаг сценария. При ошибке полезно зафиксировать ожидаемое условие, фактическое состояние и момент сбоя. Эти сведения помогают отличить неверное ожидание от дефекта приложения, который ожиданием исправить нельзя.
Попробуйте на практике
Разберите временную линию вымышленного теста на бумаге. Устанавливать Java, браузерные драйверы и дополнительные программы не требуется.
- Запишите события: в начале нажата кнопка сохранения, через одну секунду виден индикатор работы, через три секунды появляется строка с названием новой заметки.
- Сравните два плана: продолжить через две секунды независимо от состояния или ожидать нужную строку не дольше пяти секунд. Укажите, почему первый план здесь преждевременен.
- Добавьте старое сообщение об успехе, которое присутствовало ещё до нажатия. Объясните, почему ожидание этого сообщения не проверяет новую заметку.
- Составьте критерий успеха с названием текущей заметки и критерий ошибки по истечении предела. Отдельно укажите, что нажатие выполняется один раз, а ожидание только наблюдает.
Как проверить результат. Продолжение связано с появлением текущего результата, старое сообщение отвергнуто как недостаточный признак, а истечение пяти секунд приводит к понятной ошибке, не к бесконечному повторению действия.
Частые вопросы
Нужно ли заменять любое ожидание проверкой видимости?
Нет. Условие зависит от следующего шага и проверяемого результата. Видимость бывает необходимой, но сама по себе не описывает все состояния приложения.
Если большой предел устранил сбой, тест уже надёжен?
Не обязательно. Нужно проверить правильность условия, исходные данные и требуемое время отклика. Долгое ожидание может скрывать проблему, которую важно обнаруживать.
Самостоятельный разбор темы. Содержание конкретной обучающей программы здесь не представлено.