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