21 KiB
Ozon — экраны и дампы
Чек-лист экранных дампов для банка Ozon (appCode: ozon,
пакет ru.ozon.fintech.finance). Используется, когда выходит новая версия приложения
и нужно понять, какие экраны переснять.
Как пользоваться при выходе новой версии
- Завести папку
assets/ozon/<новая_версия>/(по образцуassets/ozon/19.19.1/). Платёжные экраны — в подпапкуpay/. - Пройти по чек-листу ниже и снять XML+скриншот каждого экрана на устройстве с новой
версией под теми же именами. Удобно скриптом
assets/ozon/19.19.1/capture.sh <имя>(кладёт<имя>.png+<имя>.xml; для платёжных —pay/<имя>). - Сверить новый дамп с картинкой ниже.
- Если вёрстка/тексты разошлись с парсером — поправить
android/ozon/ScreenXmlParser.cppи при необходимости завести новый трек вandroid/ozon/AppVersionTrack.h.
Версионирование
Парсер Ozon версионируется: android/ozon/AppVersionTrack.h, треки
Legacy (< 19.19.1, старый UI с подписями в text) / V19_19_1 (>= 19.19.1, по
умолчанию). Скрипты выставляют трек один раз: setVersionTrack(trackForVersion(app.appVersion)).
Новый трек добавляется только если вёрстка реально разошлась — иначе хватает
свежих эталонных дампов в assets/ozon/<версия>/.
Ключевое расхождение 19.19.1: приложение переехало на Compose-семантику —
интерактив (кнопки, вкладки, цифры пин-пада) больше не несёт видимый text, а отдаёт
стабильные тест-id в content-desc. Детекторы сделаны обратносовместимыми (матч сначала
по text, затем fallback на content-desc), правки применены в findPinCodeNodes /
isHomeScreen / PayBy{Card,Phone}Script. Подробности — assets/ozon/19.19.1/NOTES.md.
Картинка под каждым экраном — самый свежий доступный дамп (приоритет 19.19.1 → корень
assets/ozon/). Подпись «Текущий дамп» показывает, из какой версии реально взята картинка.
Экраны без дампа под новую версию помечены 🔲 «ещё не снято под 19.19.1»; без эталона вообще — ⚠️.
0. Общие баннеры / оверлеи
Всплывают поверх любого экрана и должны закрываться во всех задачах для прохождения флоу. Снимаются ситуативно (когда поймаются на экране) — под 19.19.1 пока не пересняты.
Реклама на главной — home_ad_1 🔲
Рекламный bottom-sheet (tryToFindAdBanner(), resource-id design_bottom_sheet).
Обновление Google Play — google_play 🔲
In-app update bottom-sheet (tryToFindGooglePlayBanner()).
Баннер ипотеки — banner_ipoteka 🔲
Промо-баннер на главной.
Баннер карты — card_banner 🔲
Промо-баннер «Заказать карту» на главной.
Выбор (bottom-sheet) — select_bank 🔲
Шторка выбора (tryToFindSelectBottomSheet()). Не путать с экраном выбора банка СБП
(pay/pay_buy_phone_select_bank).
Онбординг «Обновили главную» ⚠️
resource-id onboarding_viewpager, кнопка «Пропустить» (tryToFindOnboardingBanner()).
- Эталонный дамп ещё не снят
- Текущий дамп: нет
Баннер безопасности ⚠️
«Мы заботимся о вашей безопасности» (tryToFindSecurityBanner()).
- Эталонный дамп ещё не снят
- Текущий дамп: нет
Системный диалог разрешений ⚠️
com.google.android.permissioncontroller, кнопка «ЗАПРЕТИТЬ» (tryToFindSystemPermissionDenyButton()).
- Эталонный дамп ещё не снят
- Текущий дамп: нет
Замечено в 19.19.1, но ещё не снято как эталон: шторка «Разрешите доступ к камере» (для QR/паспорта, кнопка «Не сейчас») и баннер «Разрешите доступ к контактам» на экране «Кому перевести» — обе закрываются по «Не сейчас».
1. Мастер установок (BankSetupWizard)
Цепочка: runPinCheck → runProfileCheck → runCardCheck (views/bank/BankSetupWizard.cpp).
1.1. Пин-код / вход (LoginAndCheckAccountsScript)
Главный экран — home_page
Кнопки «Перевести» + «Пополнить» (isHomeScreen()). В 19.19.1 — content-desc
transfer-button-shared / replenish-button, вкладки Главная|FINANCE_TAB1…5.
Главный экран (альт. вид) — home_page_2 🔲
Альтернативное состояние главной.
Ввод PIN — pin_code
Экран ввода пин-кода (tryToFindPinCode() по тексту «Не помню код-пароль»). В 19.19.1
цифры в content-desc="key N" (см. findPinCodeNodes).
Запрос биометрии — ask_biometry 🔲
Диалог предложения включить биометрию.
1.2. Профиль (GetProfileInfoScript)
Профиль / Аккаунт — profile
Заголовок «Аккаунт» + кнопка «Выйти» (isProfileScreen()), ФИО и телефон. На 19.19.1
парсинг работает (телефон режется по «… Номер телефона»).
1.3. Карты (GetCardInfoScript)
Карта — card_screen
Основное состояние экрана карты (реквизиты маскированы, кнопка «Показать»).
Карта (развёрнута) — card_screen_open
Реквизиты раскрыты («Показать» → полный номер/срок/CVV, кнопка «Скрыть»).
findFullCardNumber читает номер.
Карта (свёрнута) — card_screen_hide
Реквизиты скрыты (маскированы).
Реквизиты счёта ⚠️
Заголовок «Реквизиты счёта» (isAccountRequisitesScreen(), parseAccountNumberFromRequisites()).
Флоу в GetCardInfoScript сейчас закомментирован.
- Эталонный дамп ещё не снят
- Текущий дамп: нет
2. fetch_transactions (EventType::FetchTransactions → GetLastTransactionsScript)
2.1. Список истории
Страница платежей — payments_page
Раздел «Платежи и переводы» (он же старт платёжных флоу: «По номеру телефона», «По номеру карты», «Между счетами»).
Последние транзакции — last_transactions
Список операций — WebView «Операции» (isTransactionListScreen(), findTransactionButtons()
поддерживает текст в Button и во вложенной View с ₽).
Баннер в списке транзакций — transaction_banner 🔲
Промо-баннер «Аналитика финансов» внутри списка операций. В 19.19.1 виден inline на дампе
last_transactions (отдельный кроп не снимался).
2.2. Детали транзакции
Детали транзакции — transaction_info
Дата+время, имя, телефон, сумма (parseTransactionDetail()).
Детали транзакции (СБП) — transaction_info_spb 🔲
Версия деталей для перевода через СБП в другой банк.
Документ операции — transaction_document
Чек/документ по операции (PDF-картинка, OCR). На СБП-чеке есть «ID операции».
3. create_transaction (EventType::CreateTransaction)
3.1. Платёж по карте (PayByCardScript)
Перевод по номеру карты — pay/pay_by_card
Экран «Перевод по номеру карты» (movable-pan-iframe), поле «Номер карты получателя».
Ввод суммы — pay/pay_by_card_enter_sum
Карта распознана (банк-получатель), сумма введена, посчитана комиссия, кнопка «Перевести N ₽».
Успех — pay/pay_by_card_success
Экран «Успешно −N ₽» (включая комиссию).
3.2. Платёж по телефону (PayByPhoneScript)
Перевод по номеру — pay/pay_buy_phone
Экран «Кому перевести»: поле «Номер телефона получателя» + последние переводы.
Ввод суммы — pay/pay_buy_phone_enter_sum
Экран «По номеру телефона»: счёт списания, получатель (с банком/СБП), «Сумма до …».
Выбор банка — pay/pay_buy_phone_select_bank
Список банков получателя (СБП): Озон/Альфа/Т-Банк/«Другой банк» (other-bank-item).
Банки — кнопки с числовым content-desc (ID банка).
Выбор банка — поиск — pay/pay_buy_phone_select_bank_1
Экран поиска банка после «Другой банк» (EditText hint «Название банка»). Ввод кириллицы —
только через ADBKeyboard (com.android.adbkeyboard); adb input text кириллицу не умеет.
Банк по умолчанию — pay/pay_buy_phone_default_bank 🔲
Экран с предустановленным банком получателя (путь «старого» номера — не снимался).
Проверка данных — pay/pay_buy_phone_check_data
Экран «Подтвердите перевод»: банк получателя, счёт списания, сумма (то же, что confirm_payment).
Перевод на новый номер — pay/pay_to_new_number
Экран «Кому перевести» с введённым новым номером.
Перевод на старый номер — pay/pay_to_old_number 🔲
Выбор ранее использованного номера (по решению не снимался — всегда вводим новый номер).
Отправлено — pay/pay_buy_phone_sent_success
Экран успешной отправки перевода по номеру (то же, что confirm_payment_success).
3.3. Подтверждение (общее для обоих)
Подтверждение платежа — pay/confirm_payment
Экран «Подтвердите перевод», кнопка «Перевести N ₽».
Подтверждение — успех — pay/confirm_payment_success
Чек «Успешно −N ₽» (СБП), с него снимается ID операции (через документ/OCR).
Подтверждение — ошибка — pay/confirm_payment_error 🔲
Экран ошибки подтверждения платежа (сложно воспроизвести).
Сводные галереи (только экраны, используемые в коде)
Эталонные дампы, на которые сейчас нет активного кода (детектор не вызывается), в эти таблицы не включены.
Задача fetch_profile — вход, профиль, карты (FetchProfile)
![]() home_page 19.19.1 |
![]() profile 19.19.1 |
![]() card_screen 19.19.1 |
Задача fetch_transactions (FetchTransactions)
![]() payments_page 19.19.1 |
![]() last_transactions 19.19.1 |
![]() transaction_info 19.19.1 |
![]() transaction_document 19.19.1 |

































