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

336 lines
21 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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
- Текущий дамп: **текущий (без версии)**
- <img src="../assets/ozon/home_ad_1.png" width="250" alt="home_ad_1">
#### Обновление Google Play — `google_play` 🔲
In-app update bottom-sheet (`tryToFindGooglePlayBanner()`).
- [ ] Снять под 19.19.1
- Текущий дамп: **текущий (без версии)**
- <img src="../assets/ozon/google_play.png" width="250" alt="google_play">
#### Баннер ипотеки — `banner_ipoteka` 🔲
Промо-баннер на главной.
- [ ] Снять под 19.19.1
- Текущий дамп: **текущий (без версии)**
- <img src="../assets/ozon/banner_ipoteka.png" width="250" alt="banner_ipoteka">
#### Баннер карты — `card_banner` 🔲
Промо-баннер «Заказать карту» на главной.
- [ ] Снять под 19.19.1
- Текущий дамп: **текущий (без версии)**
- <img src="../assets/ozon/card_banner.png" width="250" alt="card_banner">
#### Выбор (bottom-sheet) — `select_bank` 🔲
Шторка выбора (`tryToFindSelectBottomSheet()`). Не путать с экраном выбора банка СБП
(`pay/pay_buy_phone_select_bank`).
- [ ] Снять под 19.19.1
- Текущий дамп: **текущий (без версии)**
- <img src="../assets/ozon/select_bank.png" width="250" alt="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`.
- [x] Снято под 19.19.1
- Текущий дамп: **19.19.1**
- <img src="../assets/ozon/19.19.1/home_page.png" width="250" alt="home_page">
#### Главный экран (альт. вид) — `home_page_2` 🔲
Альтернативное состояние главной.
- [ ] Снять под 19.19.1
- Текущий дамп: **текущий (без версии)**
- <img src="../assets/ozon/home_page_2.png" width="250" alt="home_page_2">
#### Ввод PIN — `pin_code`
Экран ввода пин-кода (`tryToFindPinCode()` по тексту «Не помню код-пароль»). В 19.19.1
цифры в `content-desc="key N"` (см. `findPinCodeNodes`).
- [x] Снято под 19.19.1
- Текущий дамп: **19.19.1**
- <img src="../assets/ozon/19.19.1/pin_code.png" width="250" alt="pin_code">
#### Запрос биометрии — `ask_biometry` 🔲
Диалог предложения включить биометрию.
- [ ] Снять под 19.19.1
- Текущий дамп: **текущий (без версии)**
- <img src="../assets/ozon/ask_biometry.png" width="250" alt="ask_biometry">
### 1.2. Профиль (`GetProfileInfoScript`)
#### Профиль / Аккаунт — `profile`
Заголовок «Аккаунт» + кнопка «Выйти» (`isProfileScreen()`), ФИО и телефон. На 19.19.1
парсинг работает (телефон режется по «… Номер телефона»).
- [x] Снято под 19.19.1
- Текущий дамп: **19.19.1**
- <img src="../assets/ozon/19.19.1/profile.png" width="250" alt="profile">
### 1.3. Карты (`GetCardInfoScript`)
#### Карта — `card_screen`
Основное состояние экрана карты (реквизиты маскированы, кнопка «Показать»).
- [x] Снято под 19.19.1
- Текущий дамп: **19.19.1**
- <img src="../assets/ozon/19.19.1/card_screen.png" width="250" alt="card_screen">
#### Карта (развёрнута) — `card_screen_open`
Реквизиты раскрыты («Показать» → полный номер/срок/CVV, кнопка «Скрыть»).
`findFullCardNumber` читает номер.
- [x] Снято под 19.19.1
- Текущий дамп: **19.19.1**
- <img src="../assets/ozon/19.19.1/card_screen_open.png" width="250" alt="card_screen_open">
#### Карта (свёрнута) — `card_screen_hide`
Реквизиты скрыты (маскированы).
- [x] Снято под 19.19.1
- Текущий дамп: **19.19.1**
- <img src="../assets/ozon/19.19.1/card_screen_hide.png" width="250" alt="card_screen_hide">
#### Реквизиты счёта ⚠️
Заголовок «Реквизиты счёта» (`isAccountRequisitesScreen()`, `parseAccountNumberFromRequisites()`).
Флоу в `GetCardInfoScript` сейчас закомментирован.
- [ ] **Эталонный дамп ещё не снят**
- Текущий дамп: ет_
---
## 2. fetch_transactions (`EventType::FetchTransactions` → `GetLastTransactionsScript`)
### 2.1. Список истории
#### Страница платежей — `payments_page`
Раздел «Платежи и переводы» (он же старт платёжных флоу: «По номеру телефона»,
«По номеру карты», «Между счетами»).
- [x] Снято под 19.19.1
- Текущий дамп: **19.19.1**
- <img src="../assets/ozon/19.19.1/payments_page.png" width="250" alt="payments_page">
#### Последние транзакции — `last_transactions`
Список операций — WebView «Операции» (`isTransactionListScreen()`, `findTransactionButtons()`
поддерживает текст в Button и во вложенной View с ₽).
- [x] Снято под 19.19.1
- Текущий дамп: **19.19.1**
- <img src="../assets/ozon/19.19.1/last_transactions.png" width="250" alt="last_transactions">
#### Баннер в списке транзакций — `transaction_banner` 🔲
Промо-баннер «Аналитика финансов» внутри списка операций. В 19.19.1 виден inline на дампе
`last_transactions` (отдельный кроп не снимался).
- [ ] Снять под 19.19.1 (отдельно)
- Текущий дамп: **текущий (без версии)**
- <img src="../assets/ozon/transaction_banner.png" width="250" alt="transaction_banner">
### 2.2. Детали транзакции
#### Детали транзакции — `transaction_info`
Дата+время, имя, телефон, сумма (`parseTransactionDetail()`).
- [x] Снято под 19.19.1
- Текущий дамп: **19.19.1**
- <img src="../assets/ozon/19.19.1/transaction_info.png" width="250" alt="transaction_info">
#### Детали транзакции (СБП) — `transaction_info_spb` 🔲
Версия деталей для перевода через СБП в другой банк.
- [ ] Снять под 19.19.1
- Текущий дамп: **текущий (без версии)**
- <img src="../assets/ozon/transaction_info_spb.png" width="250" alt="transaction_info_spb">
#### Документ операции — `transaction_document`
Чек/документ по операции (PDF-картинка, OCR). На СБП-чеке есть «ID операции».
- [x] Снято под 19.19.1
- Текущий дамп: **19.19.1**
- <img src="../assets/ozon/19.19.1/transaction_document.png" width="250" alt="transaction_document">
---
## 3. create_transaction (`EventType::CreateTransaction`)
### 3.1. Платёж по карте (`PayByCardScript`)
#### Перевод по номеру карты — `pay/pay_by_card`
Экран «Перевод по номеру карты» (`movable-pan-iframe`), поле «Номер карты получателя».
- [x] Снято под 19.19.1
- Текущий дамп: **19.19.1**
- <img src="../assets/ozon/19.19.1/pay/pay_by_card.png" width="250" alt="pay_by_card">
#### Ввод суммы — `pay/pay_by_card_enter_sum`
Карта распознана (банк-получатель), сумма введена, посчитана комиссия, кнопка «Перевести N ₽».
- [x] Снято под 19.19.1
- Текущий дамп: **19.19.1**
- <img src="../assets/ozon/19.19.1/pay/pay_by_card_enter_sum.png" width="250" alt="pay_by_card_enter_sum">
#### Успех — `pay/pay_by_card_success`
Экран «Успешно N ₽» (включая комиссию).
- [x] Снято под 19.19.1
- Текущий дамп: **19.19.1**
- <img src="../assets/ozon/19.19.1/pay/pay_by_card_success.png" width="250" alt="pay_by_card_success">
### 3.2. Платёж по телефону (`PayByPhoneScript`)
#### Перевод по номеру — `pay/pay_buy_phone`
Экран «Кому перевести»: поле «Номер телефона получателя» + последние переводы.
- [x] Снято под 19.19.1
- Текущий дамп: **19.19.1**
- <img src="../assets/ozon/19.19.1/pay/pay_buy_phone.png" width="250" alt="pay_buy_phone">
#### Ввод суммы — `pay/pay_buy_phone_enter_sum`
Экран «По номеру телефона»: счёт списания, получатель (с банком/СБП), «Сумма до …».
- [x] Снято под 19.19.1
- Текущий дамп: **19.19.1**
- <img src="../assets/ozon/19.19.1/pay/pay_buy_phone_enter_sum.png" width="250" alt="pay_buy_phone_enter_sum">
#### Выбор банка — `pay/pay_buy_phone_select_bank`
Список банков получателя (СБП): Озон/Альфа/Т-Банк/«Другой банк» (`other-bank-item`).
Банки — кнопки с числовым `content-desc` (ID банка).
- [x] Снято под 19.19.1
- Текущий дамп: **19.19.1**
- <img src="../assets/ozon/19.19.1/pay/pay_buy_phone_select_bank.png" width="250" alt="pay_buy_phone_select_bank">
#### Выбор банка — поиск — `pay/pay_buy_phone_select_bank_1`
Экран поиска банка после «Другой банк» (EditText hint «Название банка»). Ввод кириллицы —
только через ADBKeyboard (`com.android.adbkeyboard`); `adb input text` кириллицу не умеет.
- [x] Снято под 19.19.1
- Текущий дамп: **19.19.1**
- <img src="../assets/ozon/19.19.1/pay/pay_buy_phone_select_bank_1.png" width="250" alt="pay_buy_phone_select_bank_1">
#### Банк по умолчанию — `pay/pay_buy_phone_default_bank` 🔲
Экран с предустановленным банком получателя (путь «старого» номера — не снимался).
- [ ] Снять под 19.19.1
- Текущий дамп: **текущий (без версии)**
- <img src="../assets/ozon/pay/pay_buy_phone_default_bank.png" width="250" alt="pay_buy_phone_default_bank">
#### Проверка данных — `pay/pay_buy_phone_check_data`
Экран «Подтвердите перевод»: банк получателя, счёт списания, сумма (то же, что `confirm_payment`).
- [x] Снято под 19.19.1
- Текущий дамп: **19.19.1**
- <img src="../assets/ozon/19.19.1/pay/pay_buy_phone_check_data.png" width="250" alt="pay_buy_phone_check_data">
#### Перевод на новый номер — `pay/pay_to_new_number`
Экран «Кому перевести» с введённым новым номером.
- [x] Снято под 19.19.1
- Текущий дамп: **19.19.1**
- <img src="../assets/ozon/19.19.1/pay/pay_to_new_number.png" width="250" alt="pay_to_new_number">
#### Перевод на старый номер — `pay/pay_to_old_number` 🔲
Выбор ранее использованного номера (по решению не снимался — всегда вводим новый номер).
- [ ] Снять под 19.19.1
- Текущий дамп: **текущий (без версии)**
- <img src="../assets/ozon/pay/pay_to_old_number.png" width="250" alt="pay_to_old_number">
#### Отправлено — `pay/pay_buy_phone_sent_success`
Экран успешной отправки перевода по номеру (то же, что `confirm_payment_success`).
- [x] Снято под 19.19.1
- Текущий дамп: **19.19.1**
- <img src="../assets/ozon/19.19.1/pay/pay_buy_phone_sent_success.png" width="250" alt="pay_buy_phone_sent_success">
### 3.3. Подтверждение (общее для обоих)
#### Подтверждение платежа — `pay/confirm_payment`
Экран «Подтвердите перевод», кнопка «Перевести N ₽».
- [x] Снято под 19.19.1
- Текущий дамп: **19.19.1**
- <img src="../assets/ozon/19.19.1/pay/confirm_payment.png" width="250" alt="confirm_payment">
#### Подтверждение — успех — `pay/confirm_payment_success`
Чек «Успешно N ₽» (СБП), с него снимается ID операции (через документ/OCR).
- [x] Снято под 19.19.1
- Текущий дамп: **19.19.1**
- <img src="../assets/ozon/19.19.1/pay/confirm_payment_success.png" width="250" alt="confirm_payment_success">
#### Подтверждение — ошибка — `pay/confirm_payment_error` 🔲
Экран ошибки подтверждения платежа (сложно воспроизвести).
- [ ] Снять под 19.19.1
- Текущий дамп: **текущий (без версии)**
- <img src="../assets/ozon/pay/confirm_payment_error.png" width="250" alt="confirm_payment_error">
---
## Сводные галереи (только экраны, используемые в коде)
_Эталонные дампы, на которые сейчас нет активного кода (детектор не вызывается), в эти таблицы не включены._
### Задача `fetch_profile` — вход, профиль, карты (`FetchProfile`)
| | | | | | | | |
|---|---|---|---|---|---|---|---|
| <img src="../assets/ozon/19.19.1/home_page.png" width="100"><br><sub>home_page</sub><br><sub>19.19.1</sub> | <img src="../assets/ozon/19.19.1/profile.png" width="100"><br><sub>profile</sub><br><sub>19.19.1</sub> | <img src="../assets/ozon/19.19.1/card_screen.png" width="100"><br><sub>card_screen</sub><br><sub>19.19.1</sub> | | | | | |
### Задача `fetch_transactions` (`FetchTransactions`)
| | | | | | | | |
|---|---|---|---|---|---|---|---|
| <img src="../assets/ozon/19.19.1/payments_page.png" width="100"><br><sub>payments_page</sub><br><sub>19.19.1</sub> | <img src="../assets/ozon/19.19.1/last_transactions.png" width="100"><br><sub>last_transactions</sub><br><sub>19.19.1</sub> | <img src="../assets/ozon/19.19.1/transaction_info.png" width="100"><br><sub>transaction_info</sub><br><sub>19.19.1</sub> | <img src="../assets/ozon/19.19.1/transaction_document.png" width="100"><br><sub>transaction_document</sub><br><sub>19.19.1</sub> | | | | |
### Задача `create_transaction` (`CreateTransaction`)
| | | | | | | | |
|---|---|---|---|---|---|---|---|
| <img src="../assets/ozon/19.19.1/pay/pay_by_card.png" width="100"><br><sub>pay_by_card</sub><br><sub>19.19.1</sub> | <img src="../assets/ozon/19.19.1/pay/pay_by_card_enter_sum.png" width="100"><br><sub>pay_by_card_enter_sum</sub><br><sub>19.19.1</sub> | <img src="../assets/ozon/19.19.1/pay/pay_by_card_success.png" width="100"><br><sub>pay_by_card_success</sub><br><sub>19.19.1</sub> | <img src="../assets/ozon/19.19.1/pay/pay_buy_phone.png" width="100"><br><sub>pay_buy_phone</sub><br><sub>19.19.1</sub> | <img src="../assets/ozon/19.19.1/pay/pay_buy_phone_enter_sum.png" width="100"><br><sub>pay_buy_phone_enter_sum</sub><br><sub>19.19.1</sub> | <img src="../assets/ozon/19.19.1/pay/pay_buy_phone_select_bank.png" width="100"><br><sub>pay_buy_phone_select_bank</sub><br><sub>19.19.1</sub> | <img src="../assets/ozon/19.19.1/pay/pay_to_new_number.png" width="100"><br><sub>pay_to_new_number</sub><br><sub>19.19.1</sub> | |
| <img src="../assets/ozon/19.19.1/pay/pay_buy_phone_select_bank_1.png" width="100"><br><sub>select_bank_1</sub><br><sub>19.19.1</sub> | <img src="../assets/ozon/19.19.1/pay/pay_buy_phone_sent_success.png" width="100"><br><sub>pay_buy_phone_sent_success</sub><br><sub>19.19.1</sub> | <img src="../assets/ozon/19.19.1/pay/confirm_payment.png" width="100"><br><sub>confirm_payment</sub><br><sub>19.19.1</sub> | <img src="../assets/ozon/19.19.1/pay/confirm_payment_success.png" width="100"><br><sub>confirm_payment_success</sub><br><sub>19.19.1</sub> | | | | |