From a92610f9e5e85d18ef9b46d1980106966330e263 Mon Sep 17 00:00:00 2001 From: slava Date: Fri, 24 Apr 2026 22:10:06 +0700 Subject: [PATCH] =?UTF-8?q?Improve=20"=D0=9F=D0=B5=D1=80=D0=B5=D0=B2=D0=B5?= =?UTF-8?q?=D1=81=D1=82=D0=B8"=20button=20handling=20in=20`PayByCardScript?= =?UTF-8?q?`:=20-=20Add=20keyboard=20dismissal=20and=20retry=20logic=20to?= =?UTF-8?q?=20ensure=20button=20visibility=20and=20tappability.=20-=20Upda?= =?UTF-8?q?te=20error=20messages=20to=20differentiate=20between=20missing?= =?UTF-8?q?=20or=20obstructed=20button=20scenarios.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- android/ozon/PayByCardScript.cpp | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/android/ozon/PayByCardScript.cpp b/android/ozon/PayByCardScript.cpp index b1434be..202d11a 100644 --- a/android/ozon/PayByCardScript.cpp +++ b/android/ozon/PayByCardScript.cpp @@ -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 ₽") - xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(deviceId, ++m_counter)); - Node transferBtn2 = xmlScreenParser.findButtonNode("Перевести", true); - if (transferBtn2.isEmpty()) { - m_error = "Кнопка 'Перевести' не найдена на экране ввода суммы"; + // Ретраим, пока bounds кнопки не будут ненулевыми — клавиатура могла всплыть + // заново (напр. если расчёт комиссии сфокусировал поле суммы). + Node transferBtn2; + for (int attempt = 0; attempt < 5; ++attempt) { + xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(deviceId, ++m_counter)); + 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; }