Перейти к основному содержимому

unstable_captureDomSnapshot

Обзор​

Создает компактное текстовое представление текущего документа или выбранного поддерева для диагностики. Чтобы снять документ с настройками, передайте объект настроек единственным аргументом.

Использование​

browser.unstable_captureDomSnapshot(selector?, options?)

Параметры​

ПараметрТипПо умолчаниюОписание
selectorstringbody / documentElementНеобязательный CSS-селектор корня снимка. Без него обход начинается с body документа.
options.includeTagsstring[][]Убрать имена из стандартного набора исключенных тегов; это не список разрешенных тегов.
options.excludeTagsstring[][]Исключить элементы вместе с поддеревьями; приоритет выше includeTags.
options.includeAttrsstring[][]Добавить имена в набор сохраняемых атрибутов.
options.excludeAttrsstring[][]Убрать имена из набора сохраняемых атрибутов; приоритет выше includeAttrs.
options.truncateTextbooleantrueСокращать непосредственный текст элемента. Флаг не отключает сокращение значений атрибутов.
options.maxTextLengthnumber100Максимальная длина текста или значения атрибута до добавления ....

Результат​

Promise<CaptureSnapshotResult> с четырьмя полями:

  • snapshot: компактный текст с отступами, а не HTML.
  • omittedTags: отсортированные имена исключенных тегов, встретившихся при обходе.
  • omittedAttributes: отсортированные имена пропущенных атрибутов сохраненных элементов.
  • textWasTruncated: был ли сокращен текст или значение атрибута.

Для отсутствующего CSS-совпадения возвращается snapshot: "# Element not found: <selector>"; для некорректного CSS — "# Invalid selector: <selector>". В этих случаях ошибка селектора не выбрасывается. Списки описывают конкретный обход, а не всех пропущенных потомков.

maxTextLength не ограничивает id, class и значения маркеров состояния, например @value. Исключенные id и class не перечисляются в omittedAttributes.

Ограничения​

По умолчанию исключены head, link, meta, noscript, script, slot, style, template и title. Регистр имен тегов не учитывается. Сохраняются в том числе идентификаторы, классы, атрибуты форм, часть ARIA-атрибутов и тестовые атрибуты. Остальные добавляются через includeAttrs. Скрытые сохраненные элементы помечаются @hidden; пустые неинформативные элементы и дочерние узлы SVG могут быть пропущены. Это не полный DOM и не дерево доступности.

Снимок может содержать значения полей ввода, текст страницы и чувствительные атрибуты. excludeAttrs — не универсальное средство удаления секретов: текущее значение input записывается также как @value. Используйте нечувствительные тестовые данные и проверяйте снимок перед добавлением в логи или отчеты.

warning

Это нестабильный API Testplane. Сигнатура, поведение и формат результата могут изменяться между версиями.

Пример​

Настройте baseUrl на локальный HTTP-сайт, где / возвращает HTML-страницу. Запустите пример в файле тестов Testplane.

const assert = require("node:assert/strict");

it("browser.unstable_captureDomSnapshot: capture a filtered subtree", async ({ browser }) => {
await browser.url("/");
await browser.execute(() => {
document.body.innerHTML =
'<section id="panel" data-internal="example"><button data-test="save">Save changes</button><p>abcdefghijk</p><script type="application/json">{}</script></section><p id="outside">Outside</p>';
});
const result = await browser.unstable_captureDomSnapshot("#panel", {
excludeAttrs: ["data-internal"],
maxTextLength: 6,
});
assert.match(result.snapshot, /section#panel/);
assert.match(result.snapshot, /abcdef\.\.\./);
assert.doesNotMatch(result.snapshot, /Outside|data-internal/);
assert.ok(result.omittedTags.includes("script"));
assert.ok(result.omittedAttributes.includes("data-internal"));
assert.equal(result.textWasTruncated, true);
const missing = await browser.unstable_captureDomSnapshot("#missing");
assert.equal(missing.snapshot, "# Element not found: #missing");
const invalid = await browser.unstable_captureDomSnapshot("[");
assert.equal(invalid.snapshot, "# Invalid selector: [");
});

См. также​