Optimize button verification in payment scripts:
- Refactor retry logic for visibility and tappability of key payment buttons. - Enhance error messaging for obstructed or missing buttons.
This commit is contained in:
parent
a92610f9e5
commit
cd1828e2b5
@ -311,20 +311,39 @@ void PayByPhoneScript::makePayment(
|
||||
Node bankInput = xmlScreenParser.findFirstEditText();
|
||||
if (!bankInput.isEmpty()) {
|
||||
qDebug() << "[PayByPhone] Bank search screen detected, entering bank name...";
|
||||
AdbUtils::makeTap(deviceId, bankInput.x(), bankInput.y());
|
||||
QThread::msleep(500);
|
||||
|
||||
// Ввод кириллицы через ADB Keyboard
|
||||
// Переключаем IME ДО тапа по полю — иначе смена IME после тапа
|
||||
// закроет системную клавиатуру и WebView резайзится, из-за чего
|
||||
// сохранённые координаты bankInput уезжают и повторный тап мимо.
|
||||
if (!AdbUtils::enableAdbIMEKeyboard(deviceId)) {
|
||||
m_error = "Не удалось активировать ADB Keyboard (см. логи 'ime list -s' / default_input_method)";
|
||||
qWarning() << "[PayByPhone]" << m_error;
|
||||
return;
|
||||
}
|
||||
QThread::msleep(500);
|
||||
QThread::msleep(800);
|
||||
|
||||
// Перечитываем XML — layout с ADBKeyboard (без UI) отличается от layout
|
||||
// с системной клавиатурой. Берём актуальные bounds поля.
|
||||
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(deviceId, ++m_counter));
|
||||
Node freshBankInput = xmlScreenParser.findFirstEditText();
|
||||
if (!freshBankInput.isEmpty()) bankInput = freshBankInput;
|
||||
|
||||
AdbUtils::makeTap(deviceId, bankInput.x(), bankInput.y());
|
||||
QThread::msleep(500);
|
||||
AdbUtils::inputAdbIMEText(deviceId, m_bankName);
|
||||
QThread::msleep(2000);
|
||||
QThread::msleep(2500);
|
||||
|
||||
// Верифицируем, что текст действительно попал в поле
|
||||
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(deviceId, ++m_counter));
|
||||
Node verifyInput = xmlScreenParser.findFirstEditText();
|
||||
if (verifyInput.text.isEmpty()) {
|
||||
qWarning() << "[PayByPhone] Поле банка пустое после inputAdbIMEText — ретраим";
|
||||
AdbUtils::makeTap(deviceId, bankInput.x(), bankInput.y());
|
||||
QThread::msleep(500);
|
||||
AdbUtils::inputAdbIMEText(deviceId, m_bankName);
|
||||
QThread::msleep(2500);
|
||||
}
|
||||
|
||||
AdbUtils::disableAdbIMEKeyboard(deviceId);
|
||||
qDebug() << "[PayByPhone] Entered bank name via ADB IME:" << m_bankName;
|
||||
QThread::msleep(2000);
|
||||
@ -333,6 +352,16 @@ void PayByPhoneScript::makePayment(
|
||||
bool bankFound = false;
|
||||
for (int ba = 0; ba < 10; ++ba) {
|
||||
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(deviceId, ++m_counter));
|
||||
|
||||
// Сначала проверяем, что поле поиска реально содержит введённый текст —
|
||||
// иначе мы тапаем по первому попавшемуся банку из несфильтрованного списка.
|
||||
Node searchField = xmlScreenParser.findFirstEditText();
|
||||
if (searchField.text.trimmed().isEmpty()) {
|
||||
qDebug() << "[PayByPhone] Search field still empty, waiting for filter, attempt" << ba + 1 << "/ 10";
|
||||
QThread::msleep(1500);
|
||||
continue;
|
||||
}
|
||||
|
||||
for (const Node &node : xmlScreenParser.findAllNodes()) {
|
||||
if (node.className == "android.widget.Button"
|
||||
&& !node.contentDesc.isEmpty()
|
||||
|
||||
Loading…
Reference in New Issue
Block a user