1
0
forked from BRT/arc

Refine "Other Bank" button handling in PayByPhoneScript by simplifying bounds checks, reducing scroll attempts, and improving debug logging.

This commit is contained in:
trnsmkot 2026-05-14 20:21:12 +07:00
parent 05d2f873b7
commit 7fdba5dd57

View File

@ -298,33 +298,24 @@ void PayByPhoneScript::makePayment(
if (!bankSelected) {
// Вариант 1: кнопка "Другой банк" (content-desc="other-bank-item", text пустой).
// На устройствах с маленьким экраном кнопка лежит в конце виртуализированного
// списка банков. Возможные состояния:
// - bounds=[0,0][0,0] — ниже видимой области, ещё не материализована
// - bounds=[..,h-20][..,h] — материализована, но обрезана нижним краем экрана
// Node::isEmpty это не ловит, и тап по обрезанному элементу промахивается.
// Скроллим список вниз, пока кнопка не окажется ПОЛНОСТЬЮ в видимой зоне.
// списка и приходит с bounds=[0,0][0,0] — Node::isEmpty это не ловит, тап
// улетает в (0,0). Скроллим список вниз, пока bounds не станут ненулевыми
// (после первого скролла кнопка обычно материализуется у нижнего края, но
// тап по ней работает — это её настоящая позиция в layout).
auto findOtherBank = [&]() -> Node {
for (const Node &n : xmlScreenParser.findAllNodes()) {
if (n.contentDesc.contains("other-bank-item")) return n;
}
return {};
};
auto isFullyVisible = [&](const Node &n) {
return !n.isEmpty()
&& n.width() > 0
&& n.height() >= 80
&& n.y1() >= 0
&& n.y2() <= height - 40;
};
bool foundOtherBank = false;
Node node = findOtherBank();
for (int scrollAttempt = 0;
!isFullyVisible(node) && scrollAttempt < 8;
!node.isEmpty() && (node.width() == 0 || node.height() == 0) && scrollAttempt < 6;
++scrollAttempt) {
qDebug() << "[PayByPhone] 'Другой банк' not fully visible (bounds="
<< node.x1() << "," << node.y1() << "-" << node.x2() << "," << node.y2()
<< "), scrolling list down, attempt" << scrollAttempt + 1 << "/ 8";
qDebug() << "[PayByPhone] 'Другой банк' has collapsed bounds, scrolling list down, attempt"
<< scrollAttempt + 1 << "/ 6";
AdbUtils::makeSwipe(deviceId, width / 2, height * 3 / 4, width / 2, height / 4);
QThread::msleep(800);
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(deviceId, ++m_counter));
@ -332,7 +323,7 @@ void PayByPhoneScript::makePayment(
node = findOtherBank();
}
if (isFullyVisible(node)) {
if (!node.isEmpty() && node.width() > 0 && node.height() > 0) {
qDebug() << "[PayByPhone] Tapping 'Другой банк' (other-bank-item) at"
<< node.x() << "," << node.y();
AdbUtils::makeTap(deviceId, node.x(), node.y());