我一直在使用Accessibility Object Model API,我认为尝试在Puppeteer测试中使用它会很酷.
getComputedAccessibleNode返回一个承诺.我可以使ComputedAccessibleNode显示在浏览器控制台中,但是当尝试登录到Puppeteer控制台时,我只是得到一个空对象.
我是否缺少某些内容,或者可能是因为getComputedAccessibleNode仍是实验功能吗?
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch({
headless : false,
devtools: true,
args : ['--enable-accessibility-object-model']
});
const page = await browser.newPage()
await page.goto('http://localhost:3000/')
// This shows the ComputedAccessibleNode in the browser console.
a11y_node = await page.evaluate(() => {
const checkbox = document.querySelector('label');
getComputedAccessibleNode(checkbox)
.then((data) => console.log(data))
});
// Why does this show an empty object?
page.$eval('label', (el) => getComputedAccessibleNode(el))
.then((data) => console.log(data))
debugger;
})()
解决方法:
看来ComputedAccessibleNode没有可枚举的属性.
而且puppeteer似乎会对对象进行一些简单的复制,以将其带回到Node上下文中.
使用for ... in
,您将能够为您的对象创建适当的副本并将其返回到Node上下文:
a11y_node = await page.evaluate(() => {
const checkbox = document.querySelector('label');
return getComputedAccessibleNode(checkbox)
.then((data) => {
var obj = {};
for (key in data) {
obj[key] = data[key]
}
return obj
});
});
console.log(a11y_node); // logs the object.