Как получить текст из элемента shadow dom - PullRequest
0 голосов
/ 28 августа 2018

Я хочу получить текст элемента shadow dom, чтобы сделать утверждение.

function shadowSelectorFn(el, selector) {
    if (el && el.shadowRoot) {
        return el.shadowRoot.querySelector(selector)
    }
    return;
};

async function queryDeep(selector) {
    let selectors = selector;
    if (selector && !Array.isArray(selector)) {
        selectors = selector.split(">>>");
    }
    if (!selectors || selectors.length === 0) {
        return;
    }

    const [firstSelector, ...restSelectors] = selectors;
    let parentElement = await page.$(firstSelector);
    for (const selector of restSelectors) {
        parentElement = await page.evaluateHandle(shadowSelectorFn, parentElement, selector);
    }
    if (!parentElement || !parentElement["_remoteObject"] || parentElement["_remoteObject"].type == "undefined") {
        return null;
    }
    return parentElement;
};

Я хочу сделать утверждение

Then('Username {string} should be displayed in top right corner', async function (string) {
    const text = await queryDeep(["abc-prq", "[class=mess]"]);
    const welcomeUser = await text.innerHTML;
    expect(string).to.be.equal(welcomeUser);
});

AssertionError: ожидается, что 'Welcome back, user1' равно undefined

1 Ответ

0 голосов
/ 28 августа 2018
    async function getElementProperty(elementHandle, property) {
    let page = global.page;
    let propHandle = await page.evaluateHandle(
        (element, property) => element[property],
        elementHandle, property
    );
    return propHandle.jsonValue();
}

    Then('Username {string} should be displayed in top right corner', async function (string) {
    const text = await queryDeep(["abc-prq", "[class=mess]"]);
    const welcomeUser = await getElementProperty(text, "innerText");
    expect(string).to.be.equal(welcomeUser);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...