Add logic to refresh balance on the home screen:
- Introduce `findRefreshButtonOnHomeScreen` in `ScreenXmlParser` for locating the refresh button. - Update `GetProfileInfoScript` to tap refresh button and retry balance parsing when balance is zero. - Extend mock server profiles with additional test data.
This commit is contained in:
parent
f19137280e
commit
6de3751a60
@ -50,12 +50,30 @@ void GetProfileInfoScript::doStart() {
|
||||
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(m_deviceId, ++m_counter));
|
||||
}
|
||||
|
||||
// Парсим баланс с домашнего экрана
|
||||
const double parsedBalance = xmlScreenParser.parseBalanceFromHomeScreen();
|
||||
// Парсим баланс с домашнего экрана. Если баланс не подгрузился (==0),
|
||||
// тапаем кнопку обновления и перечитываем дамп. Лоадера у refresh нет,
|
||||
// поэтому ждём фиксированно.
|
||||
double parsedBalance = xmlScreenParser.parseBalanceFromHomeScreen();
|
||||
qDebug() << "[Dushanbe::GetProfileInfo] Parsed balance:" << parsedBalance;
|
||||
if (parsedBalance > 0.0) {
|
||||
BankProfileDAO::updateAmount(app.id, parsedBalance);
|
||||
if (parsedBalance <= 0.0) {
|
||||
Node refreshBtn = xmlScreenParser.findRefreshButtonOnHomeScreen();
|
||||
if (refreshBtn.x() > 0) {
|
||||
qDebug() << "[Dushanbe::GetProfileInfo] Balance is 0, tapping refresh and retrying";
|
||||
AdbUtils::makeTap(m_deviceId, refreshBtn.x(), refreshBtn.y());
|
||||
QThread::msleep(3000);
|
||||
xmlScreenParser.parseAndSaveXml(AdbUtils::getScreenDumpAsXml(m_deviceId, ++m_counter));
|
||||
parsedBalance = xmlScreenParser.parseBalanceFromHomeScreen();
|
||||
qDebug() << "[Dushanbe::GetProfileInfo] Parsed balance after refresh:" << parsedBalance;
|
||||
}
|
||||
if (parsedBalance <= 0.0) {
|
||||
m_error = "Balance is zero after refresh: " + m_deviceId + " " + m_appCode;
|
||||
qWarning() << m_error;
|
||||
AdbUtils::tryToKillApplication(m_deviceId, app.package);
|
||||
emit finishedWithResult(m_error);
|
||||
return;
|
||||
}
|
||||
}
|
||||
BankProfileDAO::updateAmount(app.id, parsedBalance);
|
||||
|
||||
// Тапаем по кнопке меню (гамбургер, левый верхний угол)
|
||||
// Это первый clickable ImageView в верхней панели
|
||||
|
||||
@ -212,6 +212,33 @@ QString ScreenXmlParser::parseUserNameFromHomeScreen() {
|
||||
return {};
|
||||
}
|
||||
|
||||
Node ScreenXmlParser::findRefreshButtonOnHomeScreen() {
|
||||
// В блоке content-desc="TJS\n<дата>" три clickable дочерних элемента:
|
||||
// View с балансом, Button (глазик) и ImageView (рефреш). Тапать нужно
|
||||
// именно ImageView — он правее глазика и единственный ImageView внутри
|
||||
// bounds parent'а.
|
||||
Node parent;
|
||||
for (const Node &node : m_nodes) {
|
||||
if (node.contentDesc.startsWith("TJS") && node.contentDesc.contains('\n')) {
|
||||
parent = node;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (parent.x1() < 0) return {};
|
||||
|
||||
Node best;
|
||||
for (const Node &node : m_nodes) {
|
||||
if (!node.clickable) continue;
|
||||
if (node.className != "android.widget.ImageView") continue;
|
||||
if (node.x1() < parent.x1() || node.x2() > parent.x2()) continue;
|
||||
if (node.y1() < parent.y1() || node.y2() > parent.y2()) continue;
|
||||
if (best.x1() < 0 || node.x1() > best.x1()) {
|
||||
best = node;
|
||||
}
|
||||
}
|
||||
return best;
|
||||
}
|
||||
|
||||
bool ScreenXmlParser::isSideMenu() {
|
||||
bool hasVyhod = false;
|
||||
bool hasIdentified = false;
|
||||
|
||||
@ -39,6 +39,10 @@ public:
|
||||
// Парсит баланс с домашнего экрана
|
||||
double parseBalanceFromHomeScreen();
|
||||
|
||||
// Находит кнопку обновления данных в блоке "TJS\n<дата>" — правый clickable
|
||||
// ImageView (рядом слева сидит глазик-Button, его не трогаем).
|
||||
Node findRefreshButtonOnHomeScreen();
|
||||
|
||||
// Парсит имя пользователя с домашнего экрана
|
||||
QString parseUserNameFromHomeScreen();
|
||||
|
||||
|
||||
@ -1,5 +1,25 @@
|
||||
{
|
||||
"bank_profiles": [
|
||||
{
|
||||
"id": "047fd3d6-f2a2-40e0-9a39-1d11422e8832",
|
||||
"bank_name": "dushanbe_city_bank",
|
||||
"state": "enabled",
|
||||
"phone_number": "+992185555519",
|
||||
"first_name": "Мехрубон",
|
||||
"middle_name": null,
|
||||
"last_name": "Имомкулзода",
|
||||
"currency": 972,
|
||||
"device_id": "986cb259-dfec-4421-8735-4fb126cd1917",
|
||||
"device_label": "Pixel 7",
|
||||
"materials": [
|
||||
{
|
||||
"id": "83606831-7688-42cf-b2d7-2034e04f68f2",
|
||||
"state": "enabled",
|
||||
"card_number": "9762000207113258",
|
||||
"currency": 972
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "21aa26c8-ea89-45ea-a283-ee6d55ead82b",
|
||||
"bank_name": "ozon",
|
||||
|
||||
Loading…
Reference in New Issue
Block a user