class: Accessibility
如果Puppeteer方法無法執(zhí)行一個(gè)請(qǐng)求,就會(huì)引發(fā)一個(gè)錯(cuò)誤。例如,屏幕閱讀器選擇器如果在給定的時(shí)間范圍內(nèi)無法匹配,則會(huì)失敗。
可訪問性是非常特定于平臺(tái)的事情。在不同的平臺(tái)上,會(huì)有不同的屏幕閱讀器,它們的輸出可能完全不同。
Blink-Chrome的渲染引擎-具有“可訪問性樹”的概念,然后將其翻譯成不同的平臺(tái)特定的API。可訪問性名稱空間使用戶可以訪問“閃爍可訪問性樹”。
從“眨眼AX樹”轉(zhuǎn)換為特定于平臺(tái)的AX樹或屏幕閱讀器本身時(shí),大多數(shù)可訪問性樹都會(huì)被過濾掉。默認(rèn)情況下,Puppeteer嘗試近似此過濾,僅公開樹的“有趣”節(jié)點(diǎn)。
Methods
accessibility.snapshot([options])v0.9.0
- options< 對(duì)象 >
- interestingOnly< boolean >從樹中修剪無趣的節(jié)點(diǎn)。默認(rèn)為true。
- 返回:< Promise < Object >>返回具有以下屬性的AXNode對(duì)象:
- role< string >的作用。
- name< 字符串 >節(jié)點(diǎn)的可讀名稱。
- value< 字符串 | number >節(jié)點(diǎn)的當(dāng)前值。
- description< 字符串 >節(jié)點(diǎn)的其他易于閱讀的描述。
- keyshortcuts< string >與此節(jié)點(diǎn)關(guān)聯(lián)的鍵盤快捷鍵。
- roledescription< 字符串 >角色的一種易于理解的替代方法。
- valuetext< 字符串 >當(dāng)前值的描述。
- disabled< 布爾 >節(jié)點(diǎn)是否被禁用。
- expanded< boolean >節(jié)點(diǎn)是展開還是折疊。
- focused< boolean >節(jié)點(diǎn)是否聚焦。
- modal< boolean >節(jié)點(diǎn)是否為模態(tài)。
- multiline< boolean >節(jié)點(diǎn)文本輸入是否支持多行。
- multiselectable< 布爾值 >是否可以選擇多個(gè)孩子。
- readonly< boolean >該節(jié)點(diǎn)是否為只讀。
- required< 布爾 >是否需要節(jié)點(diǎn)。
- selected< boolean >是否在其父節(jié)點(diǎn)中選擇了該節(jié)點(diǎn)。
- checked< boolean |“ mixed”>復(fù)選框是選中還是“混合”。
- pressed< boolean |“ mixed”>是否已選中切換按鈕,還是“已混合”。
- level< 數(shù)字 >標(biāo)題級(jí)別。
- valuemin< 數(shù)字 >節(jié)點(diǎn)中的最小值。
- valuemax< 數(shù)字 >節(jié)點(diǎn)中的最大值。
- autocomplete< 字符串 >控件支持哪種自動(dòng)完成功能。
- haspopup< string >當(dāng)前正在為節(jié)點(diǎn)顯示哪種彈出窗口。
- invalid< string >此節(jié)點(diǎn)的值是否無效以及以何種方式無效。
- orientation< string >節(jié)點(diǎn)是水平放置還是垂直放置。
- children< 數(shù)組 < 對(duì)象 >> 此節(jié)點(diǎn)的子AXNode(如果有)。
捕獲可訪問性樹的當(dāng)前狀態(tài)。返回的對(duì)象表示頁面的根可訪問節(jié)點(diǎn)。
注意 Chromium可訪問性樹包含大多數(shù)平臺(tái)和大多數(shù)屏幕閱讀器都未使用的節(jié)點(diǎn)。Puppeteer也將丟棄它們,以便于處理樹,除非interestingOnly將其設(shè)置為false。
轉(zhuǎn)儲(chǔ)整個(gè)可訪問性樹的示例:
const snapshot = await page.accessibility.snapshot();console.log(snapshot);
記錄焦點(diǎn)節(jié)點(diǎn)名稱的示例:
const snapshot = await page.accessibility.snapshot();
const node = findFocusedNode(snapshot);
console.log(node && node.name);
function findFocusedNode(node) {
if (node.focused) return node;
for (const child of node.children || []) {
const foundNode = findFocusedNode(child);
return foundNode;
}
return null;
}
更多建議: