custom$$
Обзор
Находит элементы пользовательской стратегией поиска. Родительский элемент передается последним аргументом стратегии. Чтобы ограничить область поиска, используйте его внутри стратегии.
Использование
element.custom$$(strategyName, ...strategyArguments)
Параметры
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
strategyName | string | Обязательный | Имя, зарегистрированное через browser.addLocatorStrategy. |
strategyArguments | unknown[] | [] | Аргументы, передаваемые перед родительским DOM-элементом. |
Результат
Массив объектов элементов, получаемый через await. Если стратегия ничего не нашла, массив пуст.
Ограничения
Зарегистрируйте стратегию у того же объекта браузера. Родитель должен существовать; неизвестная стратегия или отсутствие родителя вызывают ошибку. Функция выполняется в браузере и возвращает DOM-элемент или массив DOM-элементов. Преобразуйте NodeList через Array.from. Область поиска определяет сама функция: document.querySelector продолжает искать по всему документу. Команда не ожидает заданного количества дочерних элементов или их видимости.
Пример
Настройте baseUrl на локальный HTTP-сайт, где / возвращает HTML-страницу. Запустите пример в файле тестов Testplane.
const assert = require("node:assert/strict");
it("element.custom$$: find children with a custom strategy", async ({ browser }) => {
await browser.url("/");
await browser.execute(() => {
document.body.innerHTML =
'<p data-test="item">Outside</p><section id="panel"><p data-test="item">First</p><p data-test="item">Second</p></section>';
});
browser.addLocatorStrategy("byTestWithin", (value, root) =>
Array.from(root.querySelectorAll(`[data-test="${value}"]`)),
);
const items = await browser.$("#panel").custom$$("byTestWithin", "item");
assert.equal(items.length, 2);
assert.equal(await items[1].getText(), "Second");
});