From af47dc588803e5bf44d25b41b52f7958969b3a4f Mon Sep 17 00:00:00 2001 From: slava Date: Fri, 24 Apr 2026 22:07:34 +0700 Subject: [PATCH] =?UTF-8?q?Improve=20"=D0=9F=D1=80=D0=BE=D0=B4=D0=BE=D0=BB?= =?UTF-8?q?=D0=B6=D0=B8=D1=82=D1=8C"=20button=20handling=20in=20`PayByPhon?= =?UTF-8?q?eScript`:=20-=20Add=20keyboard=20dismissal=20and=20retry=20logi?= =?UTF-8?q?c=20to=20ensure=20button=20visibility=20and=20tappability.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- android/ozon/PayByPhoneScript.cpp | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/android/ozon/PayByPhoneScript.cpp b/android/ozon/PayByPhoneScript.cpp index 470031d..fed3c9f 100644 --- a/android/ozon/PayByPhoneScript.cpp +++ b/android/ozon/PayByPhoneScript.cpp @@ -396,11 +396,24 @@ void PayByPhoneScript::makePayment( AdbUtils::inputText(deviceId, QString::number(static_cast(m_amount))); QThread::msleep(1000); - // 6. Нажимаем "Продолжить" - xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(deviceId, ++m_counter)); - Node continueBtn = xmlScreenParser.findButtonNode("Продолжить", false); - if (continueBtn.isEmpty()) { - m_error = "Кнопка 'Продолжить' не найдена"; + // Закрываем системную софт-клавиатуру, иначе она перекрывает "Продолжить" + // (кнопка уезжает за нижнюю границу web_view_holder и имеет нулевую высоту). + AdbUtils::hideKeyboard(deviceId); + QThread::msleep(800); + + // 6. Нажимаем "Продолжить" (ретраим, пока bounds перестанут быть нулевыми) + Node continueBtn; + for (int attempt = 0; attempt < 5; ++attempt) { + xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(deviceId, ++m_counter)); + continueBtn = xmlScreenParser.findButtonNode("Продолжить", false); + if (!continueBtn.isEmpty() && continueBtn.height() > 0) break; + qDebug() << "[PayByPhone] Waiting for tappable 'Продолжить', attempt" << attempt + 1 << "/ 5" + << "(bounds collapsed — клавиатура ещё видна?)"; + AdbUtils::hideKeyboard(deviceId); + QThread::msleep(1000); + } + if (continueBtn.isEmpty() || continueBtn.height() == 0) { + m_error = "Кнопка 'Продолжить' не найдена или перекрыта клавиатурой"; qWarning() << "[PayByPhone]" << m_error; return; }