107 lines
3.3 KiB
C++
107 lines
3.3 KiB
C++
//
|
||
// Created by Misterio on 24.04.2025.
|
||
//
|
||
|
||
#ifndef SCRIPT_H
|
||
#define SCRIPT_H
|
||
#include <vector>
|
||
#include <string>
|
||
#include "AdbUtils.h"
|
||
#include "XmlParser.h"
|
||
#include "auto_payment/UiElement.h"
|
||
#include <QObject>
|
||
#include <QThread>
|
||
|
||
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<UiElement> &ui);
|
||
|
||
// Проверка, что перед нами экран ввода ПИН
|
||
bool isPinScreen(const QList<UiElement> &ui);
|
||
|
||
// Получение списка кнопок с цифрами для ввода ПИН
|
||
std::vector<UiElement> getPinButtons(const QList<UiElement> &ui);
|
||
|
||
// Тап по элементу с текстом
|
||
void tapByText(const QList<UiElement> &ui, const QString &text);
|
||
|
||
// Тап по полю ввода
|
||
void tapInputField(const QList<UiElement> &ui, const QString &fieldText);
|
||
|
||
// Тап по кнопке "Далее" и её вариациям
|
||
void tapNextButton(const QList<UiElement> &ui);
|
||
|
||
// Обработка экрана с пост-логин баннерами или диалогами
|
||
bool handlePostLoginScreen(const QList<UiElement> &ui);
|
||
|
||
// Проверка, что перед нами главный экран
|
||
bool isMainScreen(const QList<UiElement> &ui);
|
||
|
||
// Тап по главному экрану
|
||
void tapMainScreen(const QList<UiElement> &ui);
|
||
|
||
// Функция для поиска карты по последним 4 цифрам
|
||
UiElement findCardByLast4Digits(const QList<UiElement> &ui, const QString &last4digits);
|
||
|
||
// Поиск кнопки "Оплатить" на экране
|
||
UiElement findPayButton(const QList<UiElement> &ui);
|
||
|
||
private:
|
||
enum class State {
|
||
WaitingForPinInput,
|
||
ClosingBanner,
|
||
OnMainScreen,
|
||
SearchingCard,
|
||
OnCardDetails,
|
||
OnTransferScreen,
|
||
Idle
|
||
};
|
||
|
||
// Основной цикл скрипта
|
||
void processUiLoop();
|
||
|
||
void handleState(const QList<UiElement> &elements);
|
||
|
||
static void inputPinCode(const QString &pinCode);
|
||
|
||
void handleClosingBanner(QList<UiElement> &elements);
|
||
|
||
static void swipeToFindElement(const QString &searchText);
|
||
|
||
void handleTransferScreen(QList<UiElement> &elements);
|
||
|
||
static void inputAmount(const QString &amount);
|
||
|
||
// Утилиты для работы с ADB
|
||
AdbUtils adbUtils;
|
||
// Парсер XML UI дампов мобильного устройства
|
||
XmlParser xmlParser;
|
||
// Текущее состояние скрипта автоматизации
|
||
State currentState = State::Idle;
|
||
};
|
||
|
||
#endif //SCRIPT_H
|