1
0
forked from BRT/arc
arc/docs/ozon_screens.md

21 KiB
Raw Blame History

Ozon — экраны и дампы

Чек-лист экранных дампов для банка Ozon (appCode: ozon, пакет ru.ozon.fintech.finance). Используется, когда выходит новая версия приложения и нужно понять, какие экраны переснять.

Как пользоваться при выходе новой версии

  1. Завести папку assets/ozon/<новая_версия>/ (по образцу assets/ozon/19.19.1/). Платёжные экраны — в подпапку pay/.
  2. Пройти по чек-листу ниже и снять XML+скриншот каждого экрана на устройстве с новой версией под теми же именами. Удобно скриптом assets/ozon/19.19.1/capture.sh <имя> (кладёт <имя>.png + <имя>.xml; для платёжных — pay/<имя>).
  3. Сверить новый дамп с картинкой ниже.
  4. Если вёрстка/тексты разошлись с парсером — поправить 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).

  • Снять под 19.19.1
  • Текущий дамп: текущий (без версии)
  • home_ad_1

Обновление Google Play — google_play 🔲

In-app update bottom-sheet (tryToFindGooglePlayBanner()).

  • Снять под 19.19.1
  • Текущий дамп: текущий (без версии)
  • google_play

Баннер ипотеки — banner_ipoteka 🔲

Промо-баннер на главной.

  • Снять под 19.19.1
  • Текущий дамп: текущий (без версии)
  • banner_ipoteka

Баннер карты — card_banner 🔲

Промо-баннер «Заказать карту» на главной.

  • Снять под 19.19.1
  • Текущий дамп: текущий (без версии)
  • card_banner

Выбор (bottom-sheet) — select_bank 🔲

Шторка выбора (tryToFindSelectBottomSheet()). Не путать с экраном выбора банка СБП (pay/pay_buy_phone_select_bank).

  • Снять под 19.19.1
  • Текущий дамп: текущий (без версии)
  • 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.

  • Снято под 19.19.1
  • Текущий дамп: 19.19.1
  • home_page

Главный экран (альт. вид) — home_page_2 🔲

Альтернативное состояние главной.

  • Снять под 19.19.1
  • Текущий дамп: текущий (без версии)
  • home_page_2

Ввод PIN — pin_code

Экран ввода пин-кода (tryToFindPinCode() по тексту «Не помню код-пароль»). В 19.19.1 цифры в content-desc="key N" (см. findPinCodeNodes).

  • Снято под 19.19.1
  • Текущий дамп: 19.19.1
  • pin_code

Запрос биометрии — ask_biometry 🔲

Диалог предложения включить биометрию.

  • Снять под 19.19.1
  • Текущий дамп: текущий (без версии)
  • ask_biometry

1.2. Профиль (GetProfileInfoScript)

Профиль / Аккаунт — profile

Заголовок «Аккаунт» + кнопка «Выйти» (isProfileScreen()), ФИО и телефон. На 19.19.1 парсинг работает (телефон режется по «… Номер телефона»).

  • Снято под 19.19.1
  • Текущий дамп: 19.19.1
  • profile

1.3. Карты (GetCardInfoScript)

Карта — card_screen

Основное состояние экрана карты (реквизиты маскированы, кнопка «Показать»).

  • Снято под 19.19.1
  • Текущий дамп: 19.19.1
  • card_screen

Карта (развёрнута) — card_screen_open

Реквизиты раскрыты («Показать» → полный номер/срок/CVV, кнопка «Скрыть»). findFullCardNumber читает номер.

  • Снято под 19.19.1
  • Текущий дамп: 19.19.1
  • card_screen_open

Карта (свёрнута) — card_screen_hide

Реквизиты скрыты (маскированы).

  • Снято под 19.19.1
  • Текущий дамп: 19.19.1
  • card_screen_hide

Реквизиты счёта ⚠️

Заголовок «Реквизиты счёта» (isAccountRequisitesScreen(), parseAccountNumberFromRequisites()). Флоу в GetCardInfoScript сейчас закомментирован.

  • Эталонный дамп ещё не снят
  • Текущий дамп: нет

2. fetch_transactions (EventType::FetchTransactionsGetLastTransactionsScript)

2.1. Список истории

Страница платежей — payments_page

Раздел «Платежи и переводы» (он же старт платёжных флоу: «По номеру телефона», «По номеру карты», «Между счетами»).

  • Снято под 19.19.1
  • Текущий дамп: 19.19.1
  • payments_page

Последние транзакции — last_transactions

Список операций — WebView «Операции» (isTransactionListScreen(), findTransactionButtons() поддерживает текст в Button и во вложенной View с ₽).

  • Снято под 19.19.1
  • Текущий дамп: 19.19.1
  • last_transactions

Баннер в списке транзакций — transaction_banner 🔲

Промо-баннер «Аналитика финансов» внутри списка операций. В 19.19.1 виден inline на дампе last_transactions (отдельный кроп не снимался).

  • Снять под 19.19.1 (отдельно)
  • Текущий дамп: текущий (без версии)
  • transaction_banner

2.2. Детали транзакции

Детали транзакции — transaction_info

Дата+время, имя, телефон, сумма (parseTransactionDetail()).

  • Снято под 19.19.1
  • Текущий дамп: 19.19.1
  • transaction_info

Детали транзакции (СБП) — transaction_info_spb 🔲

Версия деталей для перевода через СБП в другой банк.

  • Снять под 19.19.1
  • Текущий дамп: текущий (без версии)
  • transaction_info_spb

Документ операции — transaction_document

Чек/документ по операции (PDF-картинка, OCR). На СБП-чеке есть «ID операции».

  • Снято под 19.19.1
  • Текущий дамп: 19.19.1
  • transaction_document

3. create_transaction (EventType::CreateTransaction)

3.1. Платёж по карте (PayByCardScript)

Перевод по номеру карты — pay/pay_by_card

Экран «Перевод по номеру карты» (movable-pan-iframe), поле «Номер карты получателя».

  • Снято под 19.19.1
  • Текущий дамп: 19.19.1
  • pay_by_card

Ввод суммы — pay/pay_by_card_enter_sum

Карта распознана (банк-получатель), сумма введена, посчитана комиссия, кнопка «Перевести N ₽».

  • Снято под 19.19.1
  • Текущий дамп: 19.19.1
  • pay_by_card_enter_sum

Успех — pay/pay_by_card_success

Экран «Успешно N ₽» (включая комиссию).

  • Снято под 19.19.1
  • Текущий дамп: 19.19.1
  • pay_by_card_success

3.2. Платёж по телефону (PayByPhoneScript)

Перевод по номеру — pay/pay_buy_phone

Экран «Кому перевести»: поле «Номер телефона получателя» + последние переводы.

  • Снято под 19.19.1
  • Текущий дамп: 19.19.1
  • pay_buy_phone

Ввод суммы — pay/pay_buy_phone_enter_sum

Экран «По номеру телефона»: счёт списания, получатель (с банком/СБП), «Сумма до …».

  • Снято под 19.19.1
  • Текущий дамп: 19.19.1
  • pay_buy_phone_enter_sum

Выбор банка — pay/pay_buy_phone_select_bank

Список банков получателя (СБП): Озон/Альфа/Т-Банк/«Другой банк» (other-bank-item). Банки — кнопки с числовым content-desc (ID банка).

  • Снято под 19.19.1
  • Текущий дамп: 19.19.1
  • pay_buy_phone_select_bank

Выбор банка — поиск — pay/pay_buy_phone_select_bank_1

Экран поиска банка после «Другой банк» (EditText hint «Название банка»). Ввод кириллицы — только через ADBKeyboard (com.android.adbkeyboard); adb input text кириллицу не умеет.

  • Снято под 19.19.1
  • Текущий дамп: 19.19.1
  • pay_buy_phone_select_bank_1

Банк по умолчанию — pay/pay_buy_phone_default_bank 🔲

Экран с предустановленным банком получателя (путь «старого» номера — не снимался).

  • Снять под 19.19.1
  • Текущий дамп: текущий (без версии)
  • pay_buy_phone_default_bank

Проверка данных — pay/pay_buy_phone_check_data

Экран «Подтвердите перевод»: банк получателя, счёт списания, сумма (то же, что confirm_payment).

  • Снято под 19.19.1
  • Текущий дамп: 19.19.1
  • pay_buy_phone_check_data

Перевод на новый номер — pay/pay_to_new_number

Экран «Кому перевести» с введённым новым номером.

  • Снято под 19.19.1
  • Текущий дамп: 19.19.1
  • pay_to_new_number

Перевод на старый номер — pay/pay_to_old_number 🔲

Выбор ранее использованного номера (по решению не снимался — всегда вводим новый номер).

  • Снять под 19.19.1
  • Текущий дамп: текущий (без версии)
  • pay_to_old_number

Отправлено — pay/pay_buy_phone_sent_success

Экран успешной отправки перевода по номеру (то же, что confirm_payment_success).

  • Снято под 19.19.1
  • Текущий дамп: 19.19.1
  • pay_buy_phone_sent_success

3.3. Подтверждение (общее для обоих)

Подтверждение платежа — pay/confirm_payment

Экран «Подтвердите перевод», кнопка «Перевести N ₽».

  • Снято под 19.19.1
  • Текущий дамп: 19.19.1
  • confirm_payment

Подтверждение — успех — pay/confirm_payment_success

Чек «Успешно N ₽» (СБП), с него снимается ID операции (через документ/OCR).

  • Снято под 19.19.1
  • Текущий дамп: 19.19.1
  • confirm_payment_success

Подтверждение — ошибка — pay/confirm_payment_error 🔲

Экран ошибки подтверждения платежа (сложно воспроизвести).

  • Снять под 19.19.1
  • Текущий дамп: текущий (без версии)
  • 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

Задача create_transaction (CreateTransaction)


pay_by_card
19.19.1

pay_by_card_enter_sum
19.19.1

pay_by_card_success
19.19.1

pay_buy_phone
19.19.1

pay_buy_phone_enter_sum
19.19.1

pay_buy_phone_select_bank
19.19.1

pay_to_new_number
19.19.1

select_bank_1
19.19.1

pay_buy_phone_sent_success
19.19.1

confirm_payment
19.19.1

confirm_payment_success
19.19.1