// // Created by Misterio on 24.04.2025. // #ifndef SCRIPT_H #define SCRIPT_H #include #include #include "AdbUtils.h" #include "XmlParser.h" #include "auto_payment/UiElement.h" #include #include class Script final : public QObject { Q_OBJECT public: explicit Script(QObject *parent = nullptr); ~Script() override; public slots: void start(); // Старт фоновой работы void stop(); // Стоп фоновой работы signals: void finished(); // Сигнал о завершении работы private: bool m_running = true; // Функция для запуска скрипта с передачей параметров void runScript(const QString &pin, const QString &last4digits); // Функции для определения различных экранов и действий // Проверка, что перед нами экран логина bool isLoginScreen(const QList &ui); // Проверка, что перед нами экран ввода ПИН bool isPinScreen(const QList &ui); // Получение списка кнопок с цифрами для ввода ПИН std::vector getPinButtons(const QList &ui); // Тап по элементу с текстом void tapByText(const QList &ui, const QString &text); // Тап по полю ввода void tapInputField(const QList &ui, const QString &fieldText); // Тап по кнопке "Далее" и её вариациям void tapNextButton(const QList &ui); // Обработка экрана с пост-логин баннерами или диалогами bool handlePostLoginScreen(const QList &ui); // Проверка, что перед нами главный экран bool isMainScreen(const QList &ui); // Тап по главному экрану void tapMainScreen(const QList &ui); // Функция для поиска карты по последним 4 цифрам UiElement findCardByLast4Digits(const QList &ui, const QString &last4digits); // Поиск кнопки "Оплатить" на экране UiElement findPayButton(const QList &ui); private: enum class State { WaitingForPinInput, ClosingBanner, OnMainScreen, SearchingCard, OnCardDetails, OnTransferScreen, Idle }; // Основной цикл скрипта void processUiLoop(); void handleState(const QList &elements); static void inputPinCode(const QString &pinCode); void handleClosingBanner(QList &elements); static void swipeToFindElement(const QString &searchText); void handleTransferScreen(QList &elements); static void inputAmount(const QString &amount); // Утилиты для работы с ADB AdbUtils adbUtils; // Парсер XML UI дампов мобильного устройства XmlParser xmlParser; // Текущее состояние скрипта автоматизации State currentState = State::Idle; }; #endif //SCRIPT_H