--- title: Различить исходы страницы description: Объявите успешные состояния, отказы и результат по истечении времени. sources: - eazy_sdk_browser api_fingerprint: "sha256:14265759c1e44b971e88726cdf78005b3dc2f750ac179c28c4abe11432d6dd35" --- После действия страница может подтвердить успех, показать отказ или не изменить наблюдаемое состояние. `outcomes(...)` связывает признаки страницы с типизированными результатами: ```{literalinclude} ../../../../../../examples/mail/browser/send.py :language: python :start-after: "# region docs: browser-send-operation" :end-before: "# endregion docs: browser-send-operation" ``` Один запуск проходит все три состояния настоящей страницы: ```{literalinclude} ../../../../../../examples/docs/integration_browser_outcomes.py :language: python :start-after: "# docs:integration-browser-outcomes:start" :end-before: "# docs:integration-browser-outcomes:end" ``` :::{dropdown} Файл целиком ```{literalinclude} ../../../../../../examples/docs/integration_browser_outcomes.py :language: python ``` ::: ```text outcomes: Sent, Rejected, Silent ``` | Что наблюдает клиент | Что срабатывает | Что получает вызывающий | |---|---|---| | Видимая строка состояния | первый `when(...)` | `Sent` | | Видимый диалог отказа | второй `when(...)` | `Rejected` | | Ни один признак до дедлайна | `otherwise` | `Silent` | Правила `Failure(...)` проверяются перед успешными исходами и выбрасывают `PageError`. Помехи `Handle(...)` выполняются ещё раньше, чтобы баннер или диалог не скрывал настоящий результат. Первое совпавшее правило завершает ожидание. :::{note} `otherwise` должен отражать реальный контракт сайта. Верните отдельный тип для допустимого молчания или выбросьте исключение, если отсутствие признака означает сбой. ::: ## Дальше - {doc}`Пройти полный сценарий отправки ` - {doc}`Настроить вход и сессию ` - {doc}`Проверить API браузера `