Iframe-analyse
Hoe de Axe DevTools for Web APIs inhoud binnen iframes analyseert, en hoe u de analyse van frames kunt beperken of juist uitbreiden.
Pagina's plaatsen vaak aanzienlijke inhoud in <iframe>-elementen: betalingsformulieren, mediaplayers, ingesloten kaarten, chat- en helpwidgets en componenten van derden. De Axe DevTools voor Web API's analyseren de inhoud van die frames als onderdeel van een gewone pagina-analyse, in elke ondersteunde taal, zodat ingesloten inhoud geen hiaat in uw dekking vormt en geen afzonderlijke reeks tests nodig heeft.
Er hoeft niets geactiveerd te worden. axe-core wordt in de frames van de pagina geladen, elke frame wordt samen met het bovenliggende document geanalyseerd, en de resultaten worden gecombineerd tot een enkel rapport voor de pagina.
Hoe frameresultaten worden gerapporteerd
Resultaten uit frames komen in dezelfde violations-, passes-, incomplete- en inapplicable-arrays als de rest van de pagina. Wat ze identificeert is de target-array op elk resultaatknooppunt: deze bevat één selector per niveau van frame-nesting, gevolgd door een selector voor het element zelf.
- Een
targetmet één invoer is een element in het bovenliggende document. - Een
targetmet twee invoeren is een element binnen één frame: de eerste selector vindt het frame in het ouderdocument, en de tweede vindt het element binnen het document van dat frame. - Elke extra invoer vertegenwoordigt een extra niveau van frame-nesting.
Voor de volledige resultaatstructuur, zie de JavaScript API-referentie voor browsers.
Analyse beperken tot of binnen een frame
Elke API die include- en exclude-selectors accepteert, accepteert ook een pad door geneste frames. De regel is in elke taal hetzelfde: alle selectors behalve de laatste komen overeen met opeenvolgende <iframe>-elementen, en de laatste komt overeen met het element dat geanalyseerd moet worden binnen het binnenste frame. De volgorde is belangrijk, omdat het frame voor het element binnen dat frame moet komen.
| Taal | Hoe een element binnen een frame te targeten | Referentie |
|---|---|---|
| Node.js en JavaScript | Geef een array van selectors door aan include of exclude |
JavaScript API-referentie voor browsers |
| C# | Including/Excluding met meerdere selectors, of een FromFrames-selector |
C# API-referentie |
| Java | including/excluding met een List<String>, of een IFrameSelector met Hamcrest |
Selenium-testen, Hamcrest API-referentie |
| Python | including()/excluding() met meerdere selectors |
Python API-referentie |
| Ruby | Een within-clausule met een iframe: en selector:-hash |
RSpec |
Omdat een lijst met selectors altijd wordt gelezen als een pad door frames, kan deze niet worden gebruikt om meerdere niet-gerelateerde elementen te selecteren. Om meer dan één regio van een pagina te analyseren, roept u de include- of exclude-methode eenmaal per regio aan.
Analyse van frames beperken
Frames maken een pagina dynamischer, en op pagina's waar frames worden toegevoegd of verwijderd terwijl een analyse bezig is, kan het injecteren van axe-core in elke frame mislukken. De Java API biedt een failsafe waarmee een analyse kan worden beperkt tot het bovenliggende document: roep disableIframeTesting() aan voordat u begint, en axe-core wordt niet in een frame geïnjecteerd. Zie Selenium-testen.
De axe-core iframes runoptie schakelt in deze API's de frame-analyse niet uit. Omdat elke bibliotheek axe-core in frames injecteert via de browserdriver in plaats van axe-core zelf door de frames te laten lopen, rapporteert een analyse de frameresultaten ongeacht of de optie is ingesteld. Om de reikwijdte van een analyse te beperken, sluit u het frame uit met de exclude-methode voor uw taal.
Cross-Origin en sandboxed frames
Een frame kan alleen worden geanalyseerd wanneer axe-core erin kan draaien en zijn resultaten kan rapporteren.
Cross-origin frames worden geanalyseerd. Omdat deze API's een echte browsersessie aansturen en axe-core via de driver in elk frame injecteren, wordt een frame dat van een andere oorsprong wordt bediend geanalyseerd als elk ander frame, en verschijnen zijn resultaten met de rest van de pagina.
Sandboxed frames zijn afhankelijk van de bibliotheek. Een frame met een sandbox-attribuut dat allow-scripts uitsluit, blokkeert de scriptuitvoering die axe-core nodig heeft. Sommige bibliotheken omzeilen dit probleem en analyseren het frame alsnog; anderen rapporteren het frame als niet-getest. De Python API biedt without_iframe_sandboxes(), die het sandbox-attribuut verwijdert zodat axe-core binnen die frames kan draaien. Zie de Python API-referentie.
Gebruik de axe-core frame-tested-regel om onderscheid te maken tussen „geen problemen in dit frame“ en „dit frame is nooit geanalyseerd“. Een frame dat axe-core niet kon bereiken, wordt als onvolledig gerapporteerd, en een frame dat wel bereikbaar was, slaagt voor de regel. Het is een best-practice regel en verschijnt alleen wanneer uw regels best-practice regels bevat; een regels die beperkt is tot WCAG-regels, sluit deze uit, en een niet-geanalyseerd frame geeft dan helemaal geen signaal.
