1
0
forked from BRT/arc

Add closeGooglePlayBannerIfVisible to handle Google Play update banners:

- Ensure banners are closed during transaction fetching in `GetLastTransactionsScript`.
- Update XML parsing workflow to accommodate banner dismissal logic.
This commit is contained in:
slava 2026-04-18 18:52:28 +07:00
parent d0330a509a
commit d59bf51416
3 changed files with 24 additions and 0 deletions

View File

@ -224,6 +224,18 @@ bool CommonScript::tryToCloseAllBannersOnHomePage(const QString &deviceId, const
return closedAny; return closedAny;
} }
bool CommonScript::closeGooglePlayBannerIfVisible(
const QString &deviceId, const int width, const int height
) {
Node gpNode = xmlScreenParser.tryToFindGooglePlayBanner(width, height);
if (gpNode.isEmpty()) return false;
qDebug() << "[Ozon] Google Play update banner detected mid-task, closing...";
AdbUtils::makeTap(deviceId, gpNode.x(), gpNode.y());
QThread::msleep(1500);
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(deviceId, ++m_counter));
return true;
}
bool CommonScript::goToAllProducts( bool CommonScript::goToAllProducts(
const QString &deviceId, const QString &deviceId,
const int width, const int width,

View File

@ -57,6 +57,12 @@ protected:
const QString &deviceId, int width, int height const QString &deviceId, int width, int height
); );
// Если виден баннер Google Play "Доступно обновление" — закрывает его и перепарсивает XML.
// Безопасно вызывать на любом экране; возвращает true если баннер был закрыт.
bool closeGooglePlayBannerIfVisible(
const QString &deviceId, int width, int height
);
// Создаёт bank_profile на сервере если ещё не создан // Создаёт bank_profile на сервере если ещё не создан
void createBankProfileIfNeeded(const QString &deviceId, const QString &appCode, double parsedBalance = -1.0); void createBankProfileIfNeeded(const QString &deviceId, const QString &appCode, double parsedBalance = -1.0);

View File

@ -296,6 +296,7 @@ void GetLastTransactionsScript::searchTransaction(const DeviceInfo &device, int
// Ждём пока WebView раскроет accessibility tree (иначе dump пустой) // Ждём пока WebView раскроет accessibility tree (иначе dump пустой)
for (int wait = 0; wait < 5; ++wait) { for (int wait = 0; wait < 5; ++wait) {
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(m_deviceId, ++m_counter)); xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(m_deviceId, ++m_counter));
closeGooglePlayBannerIfVisible(m_deviceId, device.screenWidth, device.screenHeight);
if (xmlScreenParser.findTransactionButtons(1).size() > 0) break; if (xmlScreenParser.findTransactionButtons(1).size() > 0) break;
if (hasDateOnScreen()) break; if (hasDateOnScreen()) break;
qDebug() << "[FetchTransactions] Waiting for WebView content..." << (wait + 1); qDebug() << "[FetchTransactions] Waiting for WebView content..." << (wait + 1);
@ -311,6 +312,7 @@ void GetLastTransactionsScript::searchTransaction(const DeviceInfo &device, int
return; return;
} }
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(m_deviceId, ++m_counter)); xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(m_deviceId, ++m_counter));
closeGooglePlayBannerIfVisible(m_deviceId, device.screenWidth, device.screenHeight);
if (hasDateOnScreen()) { if (hasDateOnScreen()) {
dateFound = true; dateFound = true;
scrollsToDate = scroll; scrollsToDate = scroll;
@ -384,6 +386,7 @@ void GetLastTransactionsScript::searchTransaction(const DeviceInfo &device, int
return; return;
} }
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(m_deviceId, ++m_counter)); xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(m_deviceId, ++m_counter));
closeGooglePlayBannerIfVisible(m_deviceId, device.screenWidth, device.screenHeight);
// Логируем все заголовки дат на экране // Логируем все заголовки дат на экране
{ {
@ -451,6 +454,7 @@ void GetLastTransactionsScript::searchTransaction(const DeviceInfo &device, int
return; return;
} }
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(m_deviceId, ++m_counter)); xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(m_deviceId, ++m_counter));
closeGooglePlayBannerIfVisible(m_deviceId, device.screenWidth, device.screenHeight);
detail = xmlScreenParser.parseTransactionDetail(); detail = xmlScreenParser.parseTransactionDetail();
if (!detail.bankTime.isEmpty()) break; if (!detail.bankTime.isEmpty()) break;
if (xmlScreenParser.isTransactionListScreen()) { if (xmlScreenParser.isTransactionListScreen()) {
@ -684,6 +688,7 @@ void GetLastTransactionsScript::scanRecentTransactions(const DeviceInfo &device,
QList<Node> txButtons; QList<Node> txButtons;
for (int attempt = 0; attempt < 5; ++attempt) { for (int attempt = 0; attempt < 5; ++attempt) {
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(m_deviceId, ++m_counter)); xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(m_deviceId, ++m_counter));
closeGooglePlayBannerIfVisible(m_deviceId, device.screenWidth, device.screenHeight);
txButtons = xmlScreenParser.findTransactionButtons(8); txButtons = xmlScreenParser.findTransactionButtons(8);
if (!txButtons.isEmpty()) break; if (!txButtons.isEmpty()) break;
QThread::msleep(1500); QThread::msleep(1500);
@ -719,6 +724,7 @@ void GetLastTransactionsScript::scanRecentTransactions(const DeviceInfo &device,
TransactionInfo detail; TransactionInfo detail;
for (int attempt = 0; attempt < 10; ++attempt) { for (int attempt = 0; attempt < 10; ++attempt) {
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(m_deviceId, ++m_counter)); xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(m_deviceId, ++m_counter));
closeGooglePlayBannerIfVisible(m_deviceId, device.screenWidth, device.screenHeight);
detail = xmlScreenParser.parseTransactionDetail(); detail = xmlScreenParser.parseTransactionDetail();
if (!detail.bankTime.isEmpty()) break; if (!detail.bankTime.isEmpty()) break;
if (xmlScreenParser.isTransactionListScreen()) { if (xmlScreenParser.isTransactionListScreen()) {