Кукловод: Как я могу нажать на кнопку с определенной меткой? - PullRequest
0 голосов
/ 08 апреля 2020

Чтобы нажать на кнопку с определенной меткой, я делаю:

const button = await this.page.$$eval('button', (elms: Element[], label: string) => {
    const el: Element = elms.find((el: Element) => el.textContent === label)
    console.log(el);
    return el;
}, label);
await button.click(); // button is undefined

console.log печатает элемент в браузере, на котором я могу .click (). Работает. Но возвращаемое значение не приходит в кнопку.

Почему?

Документация $$ eval гласит:

возвращает:> Обещание, которое разрешается до возвращаемого значения pageFunction

Ответы [ 3 ]

1 голос
/ 08 апреля 2020

Вы также можете внутри поиска оценивать нужный элемент и щелкать оттуда.

await page.evaluate(label => {
    $(`button:contains('${label}')`)[0].click()
}, label)

Нет необходимости возвращать элемент для щелчка.

Как упомянул Вавилофф, проблема 'возвращаемое значение не приходит в кнопку':

Если функция, переданная на page.evaluate, возвращает не сериализуемое значение, то page.evaluate преобразуется в неопределенное

1 голос
/ 08 апреля 2020

Вы возвращаете найденный элемент DOM из функции $$eval, и элементы DOM не могут быть возвращены; возвращаемая переменная должна быть serialazable , иначе она будет неопределенной.

В соответствии с документами :

Если функция, переданная на page.evaluate, возвращает не сериализуемое значение, то page.evaluate разрешается в undefined

0 голосов
/ 09 апреля 2020

Это то, что я получил, используя информацию из обоих ответов выше.

await this.page.$$eval('button', (elms: Element[], label: string) => {
    (elms.find(el => el.textContent === label) as HTMLElement).click();
}, label);
...