Кукловод - checkbox.checked не определен - почему?

Я использую кукловод и шутку, чтобы проверить некоторые вещи в интерфейсе, и у меня небольшая проблема - я думаю, что есть некоторая концепция, которую я упускаю.

test("Assert that when checkbox isn't checked, dropdown menu is visible", async () => {
    let checkbox = await page.$('input[ng-model="user.managed.timezone"]');
    console.log("Checking if checkbox checked");
    console.log("CHECKED: ", checkbox.checked);
  });

Согласно документации кукловода, page. $ Запускает document.querySelector. Когда я запускаю в браузере следующее, я получаю то, что хочу:

let m = document.querySelector('input[ng-model="user.managed.timezone"]') console.log(m.checked) // results in true or false

но код в шутку приводит к CHECKED: undefined

Почему это так -> какая концепция мне не хватает?


person Asool    schedule 22.03.2018    source источник


Ответы (1)


Вы пытаетесь прочитать значение ElementHandle , это не то же самое, что чистый элемент JS.

Вы должны использовать этот синтаксис, чтобы получить значение checked:

await (await checkbox.getProperty('checked')).jsonValue()

Вот рабочий пример:

const puppeteer = require('puppeteer');

const html = `
    <html>
        <body>
            <input ng-model="user.managed.timezone" type="checkbox" />
        </body>
    </html>`;

(async () => {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();
    await page.goto(`data:text/html,${html}`);

    const checkbox = await page.$('input[ng-model="user.managed.timezone"]');

    console.log(await (await checkbox.getProperty('checked')).jsonValue());
    await checkbox.click();
    console.log(await (await checkbox.getProperty('checked')).jsonValue());

    await browser.close();
})();
person Everettss    schedule 22.03.2018
comment
Щелчок () должен находиться внутри оценки () ››› await page.evaluate((cb) => cb.click(), checkbox) - person rinold simon; 27.01.2020