From d37acd53478883e75306e427551c74b838424188 Mon Sep 17 00:00:00 2001 From: slava Date: Mon, 27 Apr 2026 21:45:53 +0700 Subject: [PATCH] Handle closing of ad bottom sheets in `CommonScript`: - Add detection and dismissal logic for ad banners on the homepage. - Introduce retry mechanism with back button fallback for persistent ads. --- android/ozon/CommonScript.cpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/android/ozon/CommonScript.cpp b/android/ozon/CommonScript.cpp index 73047d0..d3823e4 100644 --- a/android/ozon/CommonScript.cpp +++ b/android/ozon/CommonScript.cpp @@ -210,6 +210,21 @@ bool CommonScript::tryToCloseAllBannersOnHomePage(const QString &deviceId, const AdbUtils::makeTap(deviceId, gpNode.x(), gpNode.y()); QThread::msleep(1500); closedThis = true; + } else if (Node adNode = xmlScreenParser.tryToFindAdBanner(); !adNode.isEmpty()) { + // Рекламный bottom sheet (ипотека, бесплатная карта, "Копите звёзды" и т.п.) + qDebug() << "[tryToCloseAllBannersOnHomePage] Ad bottom sheet detected, closing..."; + AdbUtils::makeTap(deviceId, adNode.x(), adNode.y()); + QThread::msleep(1000); + // Если touch_outside не помог — жмём назад + xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(deviceId, ++m_counter)); + if (Node stillAd = xmlScreenParser.tryToFindAdBanner(); !stillAd.isEmpty()) { + qDebug() << "[tryToCloseAllBannersOnHomePage] Ad still visible, pressing back..."; + AdbUtils::goBack(deviceId); + QThread::msleep(1000); + } + closedAny = true; + xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(deviceId, ++m_counter)); + continue; } else if (Node closeBannerOrDialogNode = xmlScreenParser.tryToFindBannerOrDialog(width, height); closeBannerOrDialogNode.x() != -1 && closeBannerOrDialogNode.y() != -1) { AdbUtils::makeTap(deviceId, closeBannerOrDialogNode.x(), closeBannerOrDialogNode.y());