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; }