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