Захват состояния интерфейса (LCC.capture_ui_state)
Сигнатура
local state = LCC.capture_ui_state(options)
Требования
LCC.capture_ui_state зависит от модуля ui_element, версия ui_element._VERSION должна быть не ниже 0.6.0. Если устройство не может загрузить модуль, у него нет действительного номера версии, версия ниже 0.6.0 или отсутствует возможность захвата состояния интерфейса, вызов сразу сообщит об обновлении XXTouch для последующего использования capture_ui_state и не создаст частичный объект состояния.
Параметры
options.hit_test_spacing: положительное целое, необязательный интервал выборки попаданий на экране, по умолчанию40.options.force_hit_test: логическое значение, необязательное; принудительно ли выполнять выборку попаданий на экране, по умолчаниюfalse.
Возвращаемое значение
Возвращает объект состояния интерфейса. При создании сразу захватываются текущий снимок PNG и исходное дерево текстовых элементов, а также создаётся архив .xxtuie; последующее сохранение и запись в лог используют эти кэшированные байты и не выполняют повторный захват.
local state = LCC.capture_ui_state({
hit_test_spacing = 40,
force_hit_test = false,
})
local info = state:status()
local ok, err = state:save_to_file(XXT_SCRIPTS_PATH .. "/现场.xxtuie")
if not ok then
error(err)
end
LCC.log(1, "现场", state)
state:destroy()
Методы объекта
state:status()
Каждый вызов возвращает новую таблицу состояния; изменение возвращённого значения не влияет на внутреннее состояние объекта. После уничтожения объекта состояние всё ещё можно запросить.
status:complete,screenshot,elementsилиunavailable.captured_at/capturedAt: время UTC начала захвата.screenshot.status:capturedилиunavailable, а такжеwidthиheight; при сбое дополнительно содержитerror.elements.status:capturedилиunavailable, а такжеcount; при сбое дополнительно содержитerror.
state:save_to_file(path)
Атомарно записывает кэшированный архив по указанному пути, перезаписывая существующий файл. При успехе возвращает true, при сбое — nil, err. Путь и расширение используются ровно в переданном виде; рекомендуется .xxtuie, иначе файловый менеджер может не распознать файл автоматически. После уничтожения объекта сохранить его нельзя.
state:destroy()
Освобождает кэшированный архив. Операцию можно вызывать повторно; после уничтожения status() всё ещё доступен, но сохранение и запись в лог завершатся ошибкой.
Частичный сбой захвата
После проверки версии и возможностей снимок экрана и дерево текстовых элементов захватываются независимо. Даже при сбое одного из захватов возвращается корректный архив с фиксированными manifest.json, screenshot.png и elements.json: для неудачного снимка используется прозрачный PNG 1×1, для неудачного дерева — пустой массив элементов, а краткое описание ошибки записывается в Manifest. При отсутствии зависимостей, недопустимых параметрах, невозможности создать архив или превышении 20 MiB LCC.capture_ui_state() выдаёт ошибку.
Исходный PNG снимка ограничен 16 MiB, 16384 пикселями по каждой стороне и 12 миллионами пикселей всего; JSON элементов — 4 MiB, 5000 узлами и максимальным индексом глубины 32. При превышении отдельного ограничения соответствующий компонент помечается как unavailable.