Puppeteer - checkbox.checked 未定义 - 为什么?
Puppeteer - checkbox.checked is undefined - why?
我正在使用 puppeteer 和 jest 来测试前端的一些东西,但我遇到了一个小问题 - 我认为我缺少一些概念。
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);
});
根据 puppeteer 文档,page.$ 运行s document.querySelector。当我在浏览器上 运行 以下内容时,我得到了我想要的:
let m = document.querySelector('input[ng-model="user.managed.timezone"]')
console.log(m.checked) // results in true or false
但是开玩笑的代码导致 CHECKED: undefined
为什么会这样 --> 我错过了什么概念?
您正在尝试读取 ElementHandle, it is not the same as pure JS Element 的值。
您必须使用此语法来获取 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();
})();
我正在使用 puppeteer 和 jest 来测试前端的一些东西,但我遇到了一个小问题 - 我认为我缺少一些概念。
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);
});
根据 puppeteer 文档,page.$ 运行s document.querySelector。当我在浏览器上 运行 以下内容时,我得到了我想要的:
let m = document.querySelector('input[ng-model="user.managed.timezone"]')
console.log(m.checked) // results in true or false
但是开玩笑的代码导致 CHECKED: undefined
为什么会这样 --> 我错过了什么概念?
您正在尝试读取 ElementHandle, it is not the same as pure JS Element 的值。
您必须使用此语法来获取 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();
})();