@yanecoder

Почему не работает функция клика по resource id через adb?

У меня есть вот такой маленький код, по которому получается XML дамп экрана устройства, и по нему находятся координаты объектов в приложении через ADB на андройд устройстве, код выдаёт то что не может найти объект, хотя он есть

const shell = require('shelljs'); // Библиотека для выполнения команд в командной строке

function tapObjectById(resourceId) {
  // Получаем координаты объекта
  const coordinates = getCoordinatesById(resourceId);

  // Если координаты не найдены, выводим сообщение об ошибке и возвращаемся
  if (!coordinates) {
    console.error(`Объект с идентификатором ресурса ${resourceId} не найден.`);
    return;
  }

  // Выполняем нажатие по координатам объекта с помощью adb shell
  shell.exec(`adb shell input tap ${coordinates.x} ${coordinates.y}`);
}

function getCoordinatesById(resourceId) {
  // Получаем XML-дамп экрана устройства
  const xmlDump = shell.exec('adb shell uiautomator dump /dev/tty').toString();

  // Ищем объект по идентификатору ресурса в XML-дампе
  const nodeRegex = new RegExp(`resource-id="${resourceId}"[^>]*bounds="\\[([0-9]+),([0-9]+)`);
  const nodeMatch = xmlDump.match(nodeRegex);

  // Если объект не найден, возвращаем null
  if (!nodeMatch) {
    return null;
  }

  // Извлекаем координаты объекта из регулярного выражения
  const x = parseInt(nodeMatch[1], 10);
  const y = parseInt(nodeMatch[2], 10);

  return { x, y };
}

// Пример использования функции
tapObjectById('net.typeblog.socks:id/switch_action_button');
  • Вопрос задан
  • 92 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы