1
0
forked from BRT/arc

Improve "Перевести" button handling in PayByCardScript:

- Add keyboard dismissal and retry logic to ensure button visibility and tappability.
- Update error messages to differentiate between missing or obstructed button scenarios.
This commit is contained in:
slava 2026-04-24 22:10:06 +07:00
parent af47dc5888
commit a92610f9e5

View File

@ -272,6 +272,11 @@ void PayByCardScript::makePayment(
qDebug() << "[PayByCard] Card number and amount entered";
// Закрываем системную софт-клавиатуру — иначе она перекрывает кнопку "Перевести"
// внизу экрана (bounds схлопываются до нулевой высоты).
AdbUtils::hideKeyboard(deviceId);
QThread::msleep(800);
// 7. Ждём расчёта комиссии (текст после "Комиссия" перестаёт быть "Рассчитаем...")
double fee = 0;
bool feeCalculated = false;
@ -312,10 +317,20 @@ void PayByCardScript::makePayment(
}
// 8. Нажимаем "Перевести" (или "Перевести X ₽")
// Ретраим, пока bounds кнопки не будут ненулевыми — клавиатура могла всплыть
// заново (напр. если расчёт комиссии сфокусировал поле суммы).
Node transferBtn2;
for (int attempt = 0; attempt < 5; ++attempt) {
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(deviceId, ++m_counter));
Node transferBtn2 = xmlScreenParser.findButtonNode("Перевести", true);
if (transferBtn2.isEmpty()) {
m_error = "Кнопка 'Перевести' не найдена на экране ввода суммы";
transferBtn2 = xmlScreenParser.findButtonNode("Перевести", true);
if (!transferBtn2.isEmpty() && transferBtn2.height() > 0) break;
qDebug() << "[PayByCard] Waiting for tappable 'Перевести', attempt" << attempt + 1 << "/ 5"
<< "(bounds collapsed — клавиатура ещё видна?)";
AdbUtils::hideKeyboard(deviceId);
QThread::msleep(1000);
}
if (transferBtn2.isEmpty() || transferBtn2.height() == 0) {
m_error = "Кнопка 'Перевести' не найдена или перекрыта клавиатурой";
qWarning() << "[PayByCard]" << m_error;
return;
}