$
Обзор
Используйте команду $ вместо findElement как более краткую команду, чтобы получить один элемент на странице.
Команда $ возвращает объект, описывающий элемент, на котором можно вызывать команды действия без передачи селектора. Однако, если вы все же передадите селектор, то сначала будет най ден соответствующий элемент, а затем вызвано действие для этого элемента. Вы также можете передать объект в качестве селектора, где объект содержит свойство element-6066-11e4-a52e-4f735466cecf со значением ссылки на элемент. Затем команда преобразует ссылку в расширенный элемент WebdriverIO.
Вы можете связать $ или $$ вместе, чтобы спуститься по дереву DOM.
Подробнее о том, как выбрать определенные элементы, читайте в рецепте «Как использовать селекторы».
Использование
await browser.$(selector);
Параметры команды
| Имя | Тип | Описание | 
| selector | String или Function или Matcher | Селектор или JS-функция для получения конкретного элемента. | 
Примеры использования
index.html
<ul id="menu">
    <li>
        <a href="/">Home</a>
    </li>
    <li>
        <a href="/">Developer Guide</a>
    </li>
    <li>
        <a href="/">API</a>
    </li>
    <li>
        <a href="/">Contribute</a>
    </li>
</ul>
$.js
it("should get text a menu link", async ({ browser }) => {
    const text = await browser.$("#menu");
    console.log(await text.$$("li")[2].$("a").getText()); // выведет: "API"
});
it("should get text a menu link - JS Function", async ({ browser }) => {
    const text = await browser.$(function () {
        // Использовать здесь стрелочную функцию нельзя.
        // Это Window – https://developer.mozilla.org/en-US/docs/Web/API/Window
        //
        // TypeScript-пользователи могут сделать что-нибудь вроде:
        // return (this as Window).document.querySelector('#menu')
        return this.document.querySelector("#menu"); // Element
    });
    console.log(await text.$$("li")[2].$("a").getText()); // выведет: "API"
});
it("should allow to convert protocol result of an element into a WebdriverIO element", async ({
    browser,
}) => {
    const activeElement = await browser.getActiveElement();
    console.log(await browser.$(activeElement).getTagName()); // выведет активный элемент
});
it("should use Androids DataMatcher or ViewMatcher selector", async ({ browser }) => {
    const menuItem = await browser.$({
        name: "hasEntry",
        args: ["title", "ViewTitle"],
        class: "androidx.test.espresso.matcher.ViewMatchers",
    });
    await menuItem.click();
    const menuItem = await browser.$({
        name: "hasEntry",
        args: ["title", "ViewTitle"],
    });
    await menuItem.click();
});