Analisi degli iframe
Come gli Axe DevTools per le API Web analizzano il contenuto all'interno degli iframe e come delimitare o limitare l'analisi dei frame.
Le pagine spesso mettono una parte sostanziale del contenuto all'interno degli elementi <iframe>: moduli di pagamento, lettori multimediali, mappe incorporate, chat e widget di aiuto, e componenti di terze parti. Gli Axe DevTools per le API Web analizzano il contenuto di questi frame come parte di un'analisi ordinaria della pagina, in tutte le lingue supportate, in modo che il contenuto inserito nei frame non rappresenti un vuoto nella tua copertura e non richieda un set separato di test.
Non c'è nulla da attivare. axe-core viene caricato nei frame della pagina, ogni frame viene analizzato insieme al documento al livello superiore e i risultati sono combinati in un unico report per la pagina.
Come vengono riportati i risultati dei frame
I risultati provenienti dai frame arrivano negli stessi array violations, passes, incomplete e inapplicable del resto della pagina. Ciò che li identifica è l'array target su ogni nodo di risultato: contiene un selettore per ciascun livello di nidificazione del frame, seguito da un selettore per l'elemento stesso.
- Un
targetcon un'entrata è un elemento nel documento di livello superiore. - Un
targetcon due voci è un elemento all'interno di un frame: il primo selettore trova il frame nel documento padre e il secondo trova l'elemento all'interno del documento di quel frame. - Ogni ulteriore entrata rappresenta un altro livello di nidificazione del frame.
Per la struttura completa dei risultati, vedere il Riferimento alle API JavaScript del browser.
Delimitare l'analisi a un frame o all'interno di esso
Ogni API che accetta selettori include e exclude accetta anche un percorso attraverso frame nidificati. La regola è la stessa in ogni linguaggio: tutti i selettori tranne l'ultimo corrispondono agli elementi <iframe> successivi, e l'ultimo corrisponde all'elemento da analizzare all'interno del frame più interno. L'ordine è importante, poiché il frame deve precedere l'elemento al suo interno.
| Linguaggio | Come indirizzare un elemento all'interno di un frame | Riferimento |
|---|---|---|
| Node.js e JavaScript | Passare un array di selettori a include o exclude |
Riferimento alle API JavaScript del browser |
| C# | Including/Excluding con diversi selettori, o un selettore FromFrames |
Riferimento alle API di C# |
| Java | including/excluding con un List<String>, o un IFrameSelector con Hamcrest |
Test con Selenium, Riferimento alle API di Hamcrest |
| Python | including()/excluding() con diversi selettori |
Riferimento alle API di Python |
| Ruby | Una clausola within con un iframe: e un hash selector: |
RSpec |
Poiché un elenco di selettori è sempre letto come un percorso attraverso i frame, non può essere utilizzato per selezionare diversi elementi non correlati. Per analizzare più di una regione di una pagina, chiama il metodo include o exclude una volta per ogni regione.
Limitazione dell'analisi dei frame
I frame rendono una pagina più dinamica, e su pagine dove i frame vengono aggiunti o rimossi mentre un'analisi è in corso, l'iniezione di axe-core in ogni frame può fallire. L'API Java fornisce una funzione di sicurezza che limita un'analisi al documento di livello superiore: chiama disableIframeTesting() prima di eseguire, e axe-core non viene iniettato in alcun frame. Vedi Test con Selenium.
L'opzione di esecuzione di axe-core iframes non disattiva l'analisi dei frame in queste API. Poiché ciascuna libreria inietta axe-core nei frame attraverso il driver del browser anziché lasciare che axe-core attraversi i frame da solo, un'analisi riporta i risultati dei frame indipendentemente dal fatto che l'opzione sia impostata o meno. Per limitare l'ambito di un'analisi, escludere invece il frame, utilizzando il metodo exclude per il tuo linguaggio.
Frame di origine diversa e frame con sandbox
Un frame può essere analizzato solo quando axe-core può eseguire al suo interno e riportare i suoi risultati.
I frame di origine diversa sono analizzati. Poiché queste API guidano una sessione reale del browser e iniettano axe-core in ogni frame tramite il driver, un frame servito da un'origine diversa viene analizzato come qualsiasi altro frame, e i suoi risultati appaiono con il resto della pagina.
I frame con sandbox dipendono dalla libreria. Un frame con un attributo sandbox che omette allow-scripts blocca l'esecuzione dello script di cui axe-core ha bisogno. Alcune librerie aggirano questo e analizzano comunque il frame; altre riportano il frame come non testato. L'API di Python espone without_iframe_sandboxes(), che rimuove l'attributo sandbox in modo che axe-core possa eseguire all'interno di quei frame. Vedi il Riferimento alle API di Python.
Utilizza la regola di axe-core frame-tested per distinguere "nessun problema in questo frame" da "questo frame non è mai stato analizzato". Un frame che axe-core non ha potuto raggiungere viene riportato come incompleto, e uno che è stato raggiunto supera la regola. È una regola di buona pratica, quindi appare solo quando il tuo regolamento include regole di buona pratica; un insieme di regole limitato alle regole WCAG la omette, e un frame non analizzato non produce alcun segnale.
