Analisando iframes
Como o Axe DevTools para Web APIs analisa conteúdo dentro de iframes e como delimitar ou restringir a análise de quadros.
As páginas frequentemente colocam conteúdo substancial dentro de elementos <iframe>: formulários de pagamento, players de mídia, mapas incorporados, widgets de chat e ajuda, e componentes de terceiros. O Axe DevTools para Web APIs analisa o conteúdo desses quadros como parte de uma análise comum de página, em todos os idiomas suportados, de modo que o conteúdo em quadros não seja uma lacuna na sua cobertura e não necessite de um conjunto separado de testes.
Não há nada para ativar. O axe-core é carregado nos quadros da página, cada quadro é analisado junto com o documento de nível superior, e os resultados são combinados em um único relatório para a página.
Como os Resultados de Quadros São Relatados
Os resultados dos quadros chegam nas mesmas matrizes violations, passes, incomplete e inapplicable que o resto da página. O que os identifica é a matriz target em cada nó de resultado: ela guarda um seletor por nível de aninhamento de quadros, seguido por um seletor para o próprio elemento.
- Um
targetcom uma entrada é um elemento no documento de nível superior. - Um
targetcom duas entradas é um elemento dentro de um quadro: o primeiro seletor encontra o quadro no documento pai, e o segundo encontra o elemento dentro do documento desse quadro. - Cada entrada adicional representa outro nível de aninhamento de quadros.
Para a estrutura completa do resultado, consulte a Referência da API de JavaScript de navegador.
Delimitando a Análise a um Quadro ou Dentro de um Quadro
Toda API que aceita seletores include e exclude também aceita um caminho por quadros aninhados. A regra é a mesma em todos os idiomas: todos os seletores menos o último correspondem a sucessivos elementos <iframe>, e o último corresponde ao elemento a ser analisado dentro do quadro mais interno. A ordem importa, pois o quadro deve vir antes do elemento dentro dele.
| Linguagem | Como direcionar um elemento dentro de um quadro | Referência |
|---|---|---|
| Node.js e JavaScript | Passe uma matriz de seletores para include ou exclude |
Referência da API de JavaScript de navegador |
| C# | Including/Excluding com vários seletores, ou um seletor FromFrames |
Referência da API de C# |
| Java | including/excluding com um List<String>, ou um IFrameSelector com Hamcrest |
Testes com Selenium, Referência da API de Hamcrest |
| Python | including()/excluding() com vários seletores |
Referência da API de Python |
| Ruby | Uma cláusula within com um iframe: e uma hash selector: |
RSpec |
Porque uma lista de seletores é sempre lida como um caminho através de quadros, ela não pode ser usada para selecionar vários elementos não relacionados. Para analisar mais de uma região de uma página, chame o método include ou exclude uma vez por região.
Restringindo a Análise de Quadros
Os quadros tornam uma página mais dinâmica, e em páginas onde os quadros são adicionados ou removidos enquanto uma análise está em andamento, injetar axe-core em todos os quadros pode falhar. A API Java fornece uma proteção que limita uma análise ao documento de nível superior: chame disableIframeTesting() antes de executar, e o axe-core não é injetado em nenhum quadro. Veja Testes com Selenium.
A opção de execução iframes do axe-core não desativa a análise de quadros nessas APIs. Porque cada biblioteca injetam axe-core nos quadros através do driver do navegador em vez de permitir que axe-core percorrer os quadros, uma análise relata resultados de quadros independentemente de a opção estar definida. Para limitar o escopo de uma análise, exclua o quadro, usando o método exclude para o seu idioma.
Quadros de Origem Cruzada e Sandboxed
Um quadro só pode ser analisado quando o axe-core pode ser executado dentro dele e relatar seus resultados de volta.
Quadros de origem cruzada são analisados. Como essas APIs conduzem uma sessão real de navegador e injetam axe-core em cada quadro através do driver, um quadro servido de uma origem diferente é analisado como qualquer outro quadro, e seus resultados aparecem com o resto da página.
Quadros sandboxed dependem da biblioteca. Um quadro com um atributo sandbox que omite allow-scripts bloqueia a execução do script que o axe-core precisa. Algumas bibliotecas contornam isso e analisam o quadro mesmo assim; outras relatam o quadro como não testado. A API Python expõe without_iframe_sandboxes(), que remove o atributo sandbox para que axe-core possa ser executado dentro desses quadros. Veja a Referência da API de Python.
Use a regra frame-tested do axe-core para distinguir "sem problemas neste quadro" de "este quadro nunca foi analisado." Um quadro que o axe-core não conseguiu alcançar é relatado como incompleto, e aquele que ele alcançou passa na regra. É uma regra de boas práticas, por isso só aparece quando o seu conjunto de regras inclui regras de boas práticas; um conjunto de regras limitado às regras WCAG a omite, e um quadro não analisado, então, não produz nenhum sinal.
