Enhance input field detection and retry logic across payment scripts:
- Add retry loops for input fields in `PayByPhoneScript` and `PayByCardScript` to improve reliability. - Update window title in `MainWindow` with version info from `config.ini`.
This commit is contained in:
parent
8c2be04787
commit
d480cc51b0
@ -230,8 +230,14 @@ void PayByCardScript::makePayment(
|
|||||||
QThread::msleep(1000);
|
QThread::msleep(1000);
|
||||||
|
|
||||||
// 6. Вводим сумму в поле "Сумма" (hint содержит "Сумма")
|
// 6. Вводим сумму в поле "Сумма" (hint содержит "Сумма")
|
||||||
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(deviceId, ++m_counter));
|
Node sumEditText;
|
||||||
Node sumEditText = xmlScreenParser.findEditTextByHint(QString::fromUtf8("Сумма"));
|
for (int attempt = 0; attempt < 10; ++attempt) {
|
||||||
|
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(deviceId, ++m_counter));
|
||||||
|
sumEditText = xmlScreenParser.findEditTextByHint(QString::fromUtf8("Сумма"));
|
||||||
|
if (!sumEditText.isEmpty()) break;
|
||||||
|
qDebug() << "[Dushanbe::PayByCard] Waiting for sum input, attempt" << attempt + 1 << "/ 10";
|
||||||
|
QThread::msleep(1500);
|
||||||
|
}
|
||||||
if (sumEditText.isEmpty()) {
|
if (sumEditText.isEmpty()) {
|
||||||
m_error = "Sum input field not found";
|
m_error = "Sum input field not found";
|
||||||
qWarning() << "[Dushanbe::PayByCard]" << m_error;
|
qWarning() << "[Dushanbe::PayByCard]" << m_error;
|
||||||
|
|||||||
@ -231,8 +231,14 @@ void PayByPhoneScript::makePayment(
|
|||||||
QThread::msleep(1000);
|
QThread::msleep(1000);
|
||||||
|
|
||||||
// 6. Вводим сумму в поле "Сумма"
|
// 6. Вводим сумму в поле "Сумма"
|
||||||
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(deviceId, ++m_counter));
|
Node sumEditText;
|
||||||
Node sumEditText = xmlScreenParser.findEditTextByHint(QString::fromUtf8("Сумма"));
|
for (int attempt = 0; attempt < 10; ++attempt) {
|
||||||
|
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(deviceId, ++m_counter));
|
||||||
|
sumEditText = xmlScreenParser.findEditTextByHint(QString::fromUtf8("Сумма"));
|
||||||
|
if (!sumEditText.isEmpty()) break;
|
||||||
|
qDebug() << "[Dushanbe::PayByPhone] Waiting for sum input, attempt" << attempt + 1 << "/ 10";
|
||||||
|
QThread::msleep(1500);
|
||||||
|
}
|
||||||
if (sumEditText.isEmpty()) {
|
if (sumEditText.isEmpty()) {
|
||||||
m_error = "Sum input field not found";
|
m_error = "Sum input field not found";
|
||||||
qWarning() << "[Dushanbe::PayByPhone]" << m_error;
|
qWarning() << "[Dushanbe::PayByPhone]" << m_error;
|
||||||
|
|||||||
@ -223,7 +223,16 @@ void PayByCardScript::makePayment(
|
|||||||
qDebug() << "[PayByCard] Card payment screen loaded successfully";
|
qDebug() << "[PayByCard] Card payment screen loaded successfully";
|
||||||
|
|
||||||
// 5. Вводим номер карты в поле "Номер карты получателя"
|
// 5. Вводим номер карты в поле "Номер карты получателя"
|
||||||
Node cardInput = xmlScreenParser.findEditTextByHint("Номер карты получателя");
|
Node cardInput;
|
||||||
|
for (int attempt = 0; attempt < 10; ++attempt) {
|
||||||
|
if (!checkApp()) return;
|
||||||
|
cardInput = xmlScreenParser.findEditTextByHint("Номер карты получателя");
|
||||||
|
if (!cardInput.isEmpty()) break;
|
||||||
|
qDebug() << "[PayByCard] Waiting for 'Номер карты получателя' input, attempt" << attempt + 1 << "/ 10";
|
||||||
|
QThread::msleep(1500);
|
||||||
|
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(deviceId, ++m_counter));
|
||||||
|
}
|
||||||
|
|
||||||
if (cardInput.isEmpty()) {
|
if (cardInput.isEmpty()) {
|
||||||
m_error = "Поле 'Номер карты получателя' не найдено";
|
m_error = "Поле 'Номер карты получателя' не найдено";
|
||||||
qWarning() << "[PayByCard]" << m_error;
|
qWarning() << "[PayByCard]" << m_error;
|
||||||
@ -236,9 +245,16 @@ void PayByCardScript::makePayment(
|
|||||||
QThread::msleep(2000);
|
QThread::msleep(2000);
|
||||||
|
|
||||||
// 6. Ждём распознавания карты и вводим сумму
|
// 6. Ждём распознавания карты и вводим сумму
|
||||||
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(deviceId, ++m_counter));
|
Node sumInput;
|
||||||
|
for (int attempt = 0; attempt < 10; ++attempt) {
|
||||||
|
if (!checkApp()) return;
|
||||||
|
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(deviceId, ++m_counter));
|
||||||
|
sumInput = xmlScreenParser.findEditTextByHint("Сумма от");
|
||||||
|
if (!sumInput.isEmpty()) break;
|
||||||
|
qDebug() << "[PayByCard] Waiting for 'Сумма от' input, attempt" << attempt + 1 << "/ 10";
|
||||||
|
QThread::msleep(1500);
|
||||||
|
}
|
||||||
|
|
||||||
Node sumInput = xmlScreenParser.findEditTextByHint("Сумма от");
|
|
||||||
if (sumInput.isEmpty()) {
|
if (sumInput.isEmpty()) {
|
||||||
m_error = "Поле ввода суммы не найдено";
|
m_error = "Поле ввода суммы не найдено";
|
||||||
qWarning() << "[PayByCard]" << m_error;
|
qWarning() << "[PayByCard]" << m_error;
|
||||||
|
|||||||
@ -367,7 +367,15 @@ void PayByPhoneScript::makePayment(
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 7. Вводим сумму
|
// 7. Вводим сумму
|
||||||
Node sumInput = xmlScreenParser.findFirstEditText();
|
Node sumInput;
|
||||||
|
for (int attempt = 0; attempt < 10; ++attempt) {
|
||||||
|
if (!checkApp()) return;
|
||||||
|
sumInput = xmlScreenParser.findFirstEditText();
|
||||||
|
if (!sumInput.isEmpty()) break;
|
||||||
|
qDebug() << "[PayByPhone] Waiting for sum input field, attempt" << attempt + 1 << "/ 10";
|
||||||
|
QThread::msleep(1500);
|
||||||
|
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(deviceId, ++m_counter));
|
||||||
|
}
|
||||||
if (sumInput.isEmpty()) {
|
if (sumInput.isEmpty()) {
|
||||||
m_error = "Поле ввода суммы не найдено";
|
m_error = "Поле ввода суммы не найдено";
|
||||||
qWarning() << "[PayByPhone]" << m_error;
|
qWarning() << "[PayByPhone]" << m_error;
|
||||||
@ -412,7 +420,15 @@ void PayByPhoneScript::makePayment(
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 8. Нажимаем "Перевести ..." (ищем по первому слову)
|
// 8. Нажимаем "Перевести ..." (ищем по первому слову)
|
||||||
Node transferConfirmBtn = xmlScreenParser.findButtonNode("Перевести", true);
|
Node transferConfirmBtn;
|
||||||
|
for (int attempt = 0; attempt < 10; ++attempt) {
|
||||||
|
if (!checkApp()) return;
|
||||||
|
transferConfirmBtn = xmlScreenParser.findButtonNode("Перевести", true);
|
||||||
|
if (!transferConfirmBtn.isEmpty()) break;
|
||||||
|
qDebug() << "[PayByPhone] Waiting for 'Перевести ...' button, attempt" << attempt + 1 << "/ 10";
|
||||||
|
QThread::msleep(1500);
|
||||||
|
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(deviceId, ++m_counter));
|
||||||
|
}
|
||||||
if (transferConfirmBtn.isEmpty()) {
|
if (transferConfirmBtn.isEmpty()) {
|
||||||
m_error = "Кнопка 'Перевести ...' не найдена на экране подтверждения";
|
m_error = "Кнопка 'Перевести ...' не найдена на экране подтверждения";
|
||||||
qWarning() << "[PayByPhone]" << m_error;
|
qWarning() << "[PayByPhone]" << m_error;
|
||||||
|
|||||||
@ -26,10 +26,13 @@
|
|||||||
#include "dao/SettingsDAO.h"
|
#include "dao/SettingsDAO.h"
|
||||||
#include <QTimer>
|
#include <QTimer>
|
||||||
#include <QCoreApplication>
|
#include <QCoreApplication>
|
||||||
|
#include <QSettings>
|
||||||
#include "widget/common/FlowLayout.h"
|
#include "widget/common/FlowLayout.h"
|
||||||
|
|
||||||
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) {
|
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) {
|
||||||
setWindowTitle("ARC");
|
const QSettings settings("config.ini", QSettings::IniFormat);
|
||||||
|
const QString version = settings.value("common/version").toString();
|
||||||
|
setWindowTitle(version.isEmpty() ? "ARC" : QString("ARC v%1").arg(version));
|
||||||
|
|
||||||
// Инициализируем таймер обновления
|
// Инициализируем таймер обновления
|
||||||
timer = new QTimer(this);
|
timer = new QTimer(this);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user