1
0
forked from BRT/arc

Improve button loading and error handling in PayByCardScript:

- Add checks for the "По номеру карты" button on the payments screen.
- Refine error messages to distinguish missing button vs. incomplete screen load.
This commit is contained in:
slava 2026-04-23 21:13:31 +07:00
parent 0a460d10a0
commit 8c2be04787

View File

@ -169,34 +169,33 @@ void PayByCardScript::makePayment(
AdbUtils::makeTap(deviceId, transferBtn.x(), transferBtn.y()); AdbUtils::makeTap(deviceId, transferBtn.x(), transferBtn.y());
QThread::msleep(2000); QThread::msleep(2000);
// 2. Ждём экран "Платежи и переводы" // 2. Ждём экран "Платежи и переводы" И прогрузки кнопки "По номеру карты"
Node cardBtn;
bool paymentsPageLoaded = false; bool paymentsPageLoaded = false;
bool titleSeen = false;
for (int attempt = 0; attempt < 10; ++attempt) { for (int attempt = 0; attempt < 10; ++attempt) {
if (!checkApp()) return; if (!checkApp()) return;
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(deviceId, ++m_counter)); xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(deviceId, ++m_counter));
Node title = xmlScreenParser.findTextNode("Платежи и переводы"); Node title = xmlScreenParser.findTextNode("Платежи и переводы");
if (!title.isEmpty()) { if (!title.isEmpty()) titleSeen = true;
cardBtn = xmlScreenParser.findButtonNode("По номеру карты", false);
if (!title.isEmpty() && !cardBtn.isEmpty()) {
paymentsPageLoaded = true; paymentsPageLoaded = true;
break; break;
} }
qDebug() << "[PayByCard] Waiting for 'Платежи и переводы', attempt" << attempt + 1 << "/ 10"; qDebug() << "[PayByCard] Waiting for 'Платежи и переводы' + 'По номеру карты', attempt" << attempt + 1 << "/ 10";
QThread::msleep(1500); QThread::msleep(1500);
} }
if (!paymentsPageLoaded) { if (!paymentsPageLoaded) {
m_error = "Экран 'Платежи и переводы' не загрузился"; m_error = titleSeen
? "Кнопка 'По номеру карты' не найдена на экране платежей"
: "Экран 'Платежи и переводы' не загрузился";
qWarning() << "[PayByCard]" << m_error; qWarning() << "[PayByCard]" << m_error;
return; return;
} }
// 3. Нажимаем "По номеру карты" в секции "ДРУГИЕ СПОСОБЫ" // 3. Нажимаем "По номеру карты" в секции "ДРУГИЕ СПОСОБЫ"
Node cardBtn = xmlScreenParser.findButtonNode("По номеру карты", false);
if (cardBtn.isEmpty()) {
m_error = "Кнопка 'По номеру карты' не найдена на экране платежей";
qWarning() << "[PayByCard]" << m_error;
return;
}
qDebug() << "[PayByCard] Tapping 'По номеру карты'..."; qDebug() << "[PayByCard] Tapping 'По номеру карты'...";
AdbUtils::makeTap(deviceId, cardBtn.x(), cardBtn.y()); AdbUtils::makeTap(deviceId, cardBtn.x(), cardBtn.y());
QThread::msleep(2000); QThread::msleep(2000);