Improve "Other Bank" button handling in PayByPhoneScript by ensuring full visibility with enhanced bounds checks and increased scroll attempts.
This commit is contained in:
parent
3cd7677b11
commit
2f0ea7f456
@ -298,23 +298,33 @@ void PayByPhoneScript::makePayment(
|
||||
if (!bankSelected) {
|
||||
// Вариант 1: кнопка "Другой банк" (content-desc="other-bank-item", text пустой).
|
||||
// На устройствах с маленьким экраном кнопка лежит в конце виртуализированного
|
||||
// списка банков и приходит с bounds=[0,0][0,0] — Node::isEmpty это не отлавливает
|
||||
// (требует все координаты < 0), и тап уходит в (0,0). Скроллим список вниз,
|
||||
// пока bounds не станут реальными, и только тогда тапаем.
|
||||
// списка банков. Возможные состояния:
|
||||
// - bounds=[0,0][0,0] — ниже видимой области, ещё не материализована
|
||||
// - bounds=[..,h-20][..,h] — материализована, но обрезана нижним краем экрана
|
||||
// Node::isEmpty это не ловит, и тап по обрезанному элементу промахивается.
|
||||
// Скроллим список вниз, пока кнопка не окажется ПОЛНОСТЬЮ в видимой зоне.
|
||||
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;
|
||||
!node.isEmpty() && (node.width() == 0 || node.height() == 0) && scrollAttempt < 6;
|
||||
!isFullyVisible(node) && scrollAttempt < 8;
|
||||
++scrollAttempt) {
|
||||
qDebug() << "[PayByPhone] 'Другой банк' has collapsed bounds, scrolling list down, attempt"
|
||||
<< scrollAttempt + 1 << "/ 6";
|
||||
qDebug() << "[PayByPhone] 'Другой банк' not fully visible (bounds="
|
||||
<< node.x1() << "," << node.y1() << "-" << node.x2() << "," << node.y2()
|
||||
<< "), scrolling list down, attempt" << scrollAttempt + 1 << "/ 8";
|
||||
AdbUtils::makeSwipe(deviceId, width / 2, height * 3 / 4, width / 2, height / 4);
|
||||
QThread::msleep(800);
|
||||
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(deviceId, ++m_counter));
|
||||
@ -322,7 +332,7 @@ void PayByPhoneScript::makePayment(
|
||||
node = findOtherBank();
|
||||
}
|
||||
|
||||
if (!node.isEmpty() && node.width() > 0 && node.height() > 0) {
|
||||
if (isFullyVisible(node)) {
|
||||
qDebug() << "[PayByPhone] Tapping 'Другой банк' (other-bank-item) at"
|
||||
<< node.x() << "," << node.y();
|
||||
AdbUtils::makeTap(deviceId, node.x(), node.y());
|
||||
|
||||
Loading…
Reference in New Issue
Block a user