From 052f9051e1eac9207d9a825c5e835e364679830a Mon Sep 17 00:00:00 2001 From: slava Date: Mon, 27 Apr 2026 18:19:10 +0700 Subject: [PATCH] =?UTF-8?q?Improve=20"=D0=9F=D0=BE=D0=BA=D0=B0=D0=B7=D0=B0?= =?UTF-8?q?=D1=82=D1=8C"=20button=20scrolling=20in=20`GetCardInfoScript`?= =?UTF-8?q?=20to=20handle=20devices=20with=20short=20screen=20heights:=20-?= =?UTF-8?q?=20Add=20logic=20to=20scroll=20WebView=20until=20the=20button?= =?UTF-8?q?=20is=20in=20the=20visible=20top-third=20of=20the=20screen.=20-?= =?UTF-8?q?=20Account=20for=20bottom=20navigation=20obstruction=20and=20en?= =?UTF-8?q?sure=20reliable=20tapping.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- android/ozon/GetCardInfoScript.cpp | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/android/ozon/GetCardInfoScript.cpp b/android/ozon/GetCardInfoScript.cpp index 2b93bbc..974aead 100644 --- a/android/ozon/GetCardInfoScript.cpp +++ b/android/ozon/GetCardInfoScript.cpp @@ -251,6 +251,36 @@ void GetCardInfoScript::doStart() { AdbUtils::makeTap(m_deviceId, cardBtn.x(), cardBtn.y()); + // Скроллим WebView вверх, пока "Показать" не окажется в верхней трети экрана. + // На устройствах с короткой высотой (например, SM-A165F, h=2340) кнопка "Показать" + // находится за bottom navigation, и тап уходит в нав-бар. + const int targetTopY = device.screenHeight / 3; + for (int scrollAttempt = 0; scrollAttempt < 6; ++scrollAttempt) { + QThread::msleep(scrollAttempt == 0 ? 2000 : 600); + xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(m_deviceId, ++m_counter)); + + Node candidate = xmlScreenParser.findButtonNode("Показать", false); + if (candidate.isEmpty()) { + if (xmlScreenParser.isHomeScreen()) { + cardBtn = xmlScreenParser.findCardButtonByLastNumbers(card.lastNumbers); + if (!cardBtn.isEmpty()) { + qDebug() << "[GetCardInfo] Still on home before scroll, re-tapping card" << card.lastNumbers; + AdbUtils::makeTap(m_deviceId, cardBtn.x(), cardBtn.y()); + } + } + continue; + } + if (candidate.y() <= targetTopY) { + qDebug() << "[GetCardInfo] 'Показать' already at top y=" << candidate.y(); + break; + } + const int swipeFromY = candidate.y(); + const int swipeToY = device.screenHeight / 6; + qDebug() << "[GetCardInfo] Scrolling 'Показать' up:" << swipeFromY << "->" << swipeToY; + AdbUtils::makeSwipe(m_deviceId, device.screenWidth / 2, swipeFromY, + device.screenWidth / 2, swipeToY); + } + // Ждём экран карты и стабильной геометрии блока реквизитов. // Без этого тап по "Показать" во время reflow уезжает ниже — в "Защиту от мошенников". // Стабильность: "Показать" совпадает по y1 с "Реквизиты карты" И координаты не меняются в двух подряд дампах.