Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Julien Chable

He blogs, you blog, I blog ...

Archives

Développer des applications .NET et SharePoint accessibles avec UI Automation et ARIA

Voici une rediffusion de l’article paru dans le magazine Programmez du mois d’Avril que je diffuse plus largement sur mon blog. Pour aller plus loin dans ce domaine, vous pouvez aussi consulter le livre blanc présenté dans un de mes précédents posts.

Depuis l’arrivée du RGAA (Référentiel Général sur l’Accessibilité des Administration) fin d’année dernière, tous les sites web des administrations se doivent de s’y conformer et de devenir accessibles. Cependant le web n’est pas le seul domaine où les efforts d’accessibilité doivent être réalisés. En effet, quoi de plus normal pour une personne non voyante de pouvoir utiliser Word ou une application Silverlight tout comme elle pourrait naviguer dans un espace d’équipe SharePoint ?

Dans cet article, nous allons traiter ensemble des solutions techniques permettant à des technologies d’assistance (lecteur vocale d’écran, table braille, etc) de comprendre le contexte dans lequel se trouve l’utilisateur afin de lui permettre de naviguer et d’interagir avec les applications de façon efficace. Parmi ces solutions techniques nous allons trouver principalement UI Automation pour WPF et Silverlight, et ARIA pour le web et SharePoint 2010.

De MSAA à UI Automation

Pour les développeurs connaissant MSAA (Microsoft Active Accessibility) et l’interface IAccessible, permettant de pouvoir retrouver des informations sur les éléments composant une interface utilisateur, sachez que cette API est très certainement appelée à être dépréciée pour se voir remplacée par UI Automation (au moins sur la plateforme .NET). En cause, des lacunes dans le domaine des performances, de la complexité de mise en œuvre et une architecture dépassée.

UI Automation comble ces lacunes et apporte également un accès en code managé (C#, etc) et code natif (C/C++) en plus d’être pleinement compatible avec son ancêtre IAccessible, ce qui permet à une application IAccessible de consommer une application UI Automation et à une application UI Automation de consommer une application IAccessible. En plus de ces avantages, on notera également qu’UI Automation apporte une grande productivité pour annoter les éléments composants l’interface graphique des informations nécessaires aux technologies d’assistance.

Dans les deux cas le principe est similaire et consiste à exposer les informations des objets de l’interface utilisateur dans un arbre hiérarchique. Ces informations seront ainsi disponibles pour toutes les applications désirant connaître la composition de l’interface utilisateur. Cela peut-être une technologie d’assistance nécessaire à une personne non voyante ou mal voyante, qu’une application de test d’interface utilisateur. Car, au-delà de servir à exposer des informations destiné aux technologies d’assistance, UI Automation sert également à automatiser vos tests d’interface ; un des tests les plus complexe et fastidieux à automatiser, du moins avant l’arrivée de UI Automation.

image 
Fig 1 – Architecture d’UI Automation

Microsoft a publié les spécifications d’UI Automation et celle de MSAA sous licence Microsoft Open Specification Promise afin de permettre aux plus grand nombre de créer des implémentations compatibles. A aujourd’hui, les plateformes concernées par UI Automation sont Windows XP SP2, Windows Vista, Windows 7, Windows Server 2003 SP2 et Windows Server 2008. Notez que Mono, l’implémentation libre de .NET, implémente également UI Automation.

Rendre vos applications WPF accessibles

L’arrivée en 2005 de .NET 3.0 à apporter WPF mais aussi une brique trop peu connue aujourd’hui qu’est UI Automation. Comme le montre la figure 1, l’architecture d’UI Automation devrait vous positionner dans l’une des positions en fonction de ce que vous développez : client ou fournisseur. Si vous concevez une application que vous souhaitez rendre accessible, vous vous trouver dans la position du fournisseur. Si en revanche, votre application consomme les informations retournée par UI Automation, par exemple pour créer une application d’aide à la lecture d’écran ou alors une automatisation des tests de l’interface utilisateur, vous vous trouvez dans le cas du client.

Quel que soit le cas dans lequel vous vous trouvez, vous devez ajouter une référence à votre projet Visual Studio vers l’assembly nommée UIAutomationTypes. Si vous vous trouvez dans le cas du fournisseur, l’assembly UIAutomationProvider devra être également ajoutée, et dans le cas d’un client vous ajouterez plutôt l’assembly UIAutomationClient.

Dans le cadre d’une application WPF, UI Automation est nativement supporté directement au travers de la description de l’interface que vous créez en annotant vos contrôles d’attributs spécifiques :

<Window ...>

<Label Name="lblNom">Nom d'utilisateur :</Label>

<TextBox Name="txtNom" Height="30" Width="300"

AutomationProperties.Name="NomUtilisateur"

AutomationProperties.IsRequiredForForm="True"

AutomationProperties.HelpText="Nom d'utilisateur du formulaire de connexion"/>

<Label Name="lblMotDePasse">Mot de passe :</Label>

<PasswordBox Name="txtMotDePasse" Height="30" Width="300"

AutomationProperties.Name="MotDePasse"

AutomationProperties.IsRequiredForForm="True"

AutomationProperties.HelpText="Mot de passe du formulaire de connexion"/>

<Button Name="btnOK" ...>

...

</Window>

En complétant les éléments de l’interface avec des propriétés UI Automation, vous rendez visible à toutes applications désirant connaître la composition des éléments de l’interface : identifiant, contexte (attribut IsRequiredForForm), relation avec les autres contrôles( attribut labeledBy par exemple) etc. En utilisant un logiciel nommé UI Spy, disponible avec le SDK Windows 7, vous pourrez visualiser les informations disponibles aux autres applications. La figure 2 montre les informations exposées par l’application dans un arbre (partie gauche) et avec les informations de chaque élément (partie droite).

image

Fig. 2 – Aperçu de l’application WPF dans UISpy

Si vous désirez exploiter une application pour la manipuler ou pour créer une technologie d’assistance en utilisant les API d’UI Automation, voici quelques extraits de code :

// On récupère l’AutomationElement depuis le handle d’un processus

AutomationElement notepadApplication = AutomationElement.FromHandle(p.MainWindowHandle);

// Nous récupérons un contrôle en particuler et utilisons ses informations

PropertyCondition motDePasseCondition =

new PropertyCondition(AutomationElement.NameProperty, "MotDePasse");

AutomationElement motDePasseElement =

wpfDemoUIAutomationApplication.FindFirst(TreeScope.Descendants, motDePasseCondition);

if motDePasseElement.Current.IsRequiredForForm)

...

}

// Utiliser le comportement d’un contrôle pour interagir avec (ici une fenêtre)

TransformPattern tranform = notepadApplication.GetCurrentPattern(

TransformPattern.Pattern) as TransformPattern;

if (tranform != null) {

// Si c’est OK, on redimensionne et on déplace.

tranform.Resize(1000, 300);

tranform.Move(10, 10);

}

Pour un développeur, rajoutez des attributs est extrêmement simple et peu chronophage. Cet effort sera d’autant récompensé que vos testeurs seront dans la capacité de créer des scénarios qui pourront être automatisé directement avec UI Automation. La création de contrôle personnalisé sort du cadre de cet article, mais vous pourrez trouver tous les éléments dans les ressources du séminaire sur le sujet disponible sur le site de Microsoft France (cf référence).

Développez des applications accessibles ne se résume bien évidemment pas à simplement décorer le XAML de l’interface avec des attributs. Voici quelques considérations supplémentaires nécessaires permettant d’améliorer l’accès et la compréhension de votre interface aux technologies d’assistance :

  • Paramètres utilisateurs :
    • Ne pas changer les paramètres système de l’utilisateur,
    • Supporter les paramètres d’accessibilité (contraste élevé, taille police 120ppp, etc)
  • Conception de l’interface :
    • Ne pas coder les couleurs en dur, utilisez au maximum les couleurs du système,
    • Supporter une interface dont tous les éléments rentrent dans une résolution de 1024*768,
    • Fournir un équivalent textuel au élément non textuel (comme le ‘alt’ pour les images d’une page web)
  • Navigation :
    • Activer la sélection par tabulation pour tous les contrôles où l’utilisateur nécessite une interaction, et dans un ordre logique,
    • Pour les personnes voyante sou mal voyantes, vos contrôles doivent montrer que le focus est sur eux (ex : par une bordure épaissie, une ombre, etc),
    • Exposer un raccourci pour chaque menus ou commandes

Rendre vos applications Silverlight accessibles

Depuis la sortie de Silverlight 2, UI Automation est aussi disponible au sein du runtime d’exécution Silverlight. Cela se traduit par une technique de mise en œuvre d’UI Automation très similaire à WPF pour votre application Silverlight. Voici l’équivalent du XAML précédent pour Silverligth :

<UserControl ...>

...

<TextBlock Name="lblNom">Nom d'utilisateur :</TextBlock>

<TextBox Name="txtNom" Height="30" Width="300"

AutomationProperties.Name="NomUtilisateur"

AutomationProperties.IsRequiredForForm="True"

AutomationProperties.HelpText="Nom d'utilisateur du formaulaire de connexion"/>

<TextBlock Name="lblMotDePasse">Mot de passe :</TextBlock>

<PasswordBox Name="txtMotDePasse" Height="30" Width="300"

AutomationProperties.Name="MotDePasse"

AutomationProperties.IsRequiredForForm="True"

AutomationProperties.HelpText="Mot de passe du formulaire de connexion"/>

<Button Name="btnOK" Height="30" Width="300" Content="OK" Margin="0,20,0,0" />

</UserControl>

Sachez que l’implémentation d’UI Automation dans Silverlight possède néanmoins quelques différences par rapport à WPF : espaces de noms utilisés, DLL à référencer, interface à implémenter pour les contrôles personnalisés, etc.

Etre accessible avec SharePoint 2007

Alors que SharePoint 2007 n’utilisait pas de standard particulier pour support l’accessibilité, plusieurs projets avait été lancé pour combler cette lacune. Parmi ceux-là, le projet AKS (Accessibility Kit for SharePoint 2007) est le plus abouti. Mais attention ce dernier n’est pas une solution miracle qui va rendre vos sites SharePoint accessibles sans votre participation, ce projet est pour une bonne part un regroupement d’éléments méthodologiques.

Vous pouvez trouver le projet à cette adresse : http://aks.hisoftware.com. Une fois installé et activé, votre travail ne fait que commencer, les sites ne devenant pas immédiatement conformes au WCAG 1.0 et niveau A ou AA. Les points d’amélioration pour rendre votre site accessible vont passer par une mise à jour des CSS, des pages maîtres, de définitions de site, des adaptateurs de contrôles, des contenus restitués (par exemple, le flux HTML issu d’une transformation XSLT d’une webpart), etc. D’autres composants (par exemple, aRTE pour accessible Rich Text Editor, SPWorks ARF et Content and Code SAS) vous fourniront des solutions complémentaires à AKS.

SharePoint 2010 accessible … par défaut !

ARIA (Accessible Rich Internet Application) est une initiative du W3C pour répondre à certaines problématiques posées par le DHTML/Ajax/SVG (HTML 5 incorporera ces fonctionnalités). En effet, IE6 et 7 ne supporte pas les notifications de rafraichissement partiel d’une page, ce qui rend inefficace les lecteurs d’écran pour les personnes non voyantes devant les applications AJAX ; qui aujourd’hui représente la plupart des applications web populaires.

L’apport d’ARIA pour les pages web concerne notamment : l’utilisation des technologies web sémantique, la séparation stricte entre la présentation et le contenu, permettre la surveillance passive des applications par les technologies d’assistance, etc. Au niveau des attributs sémantiques, vous aurez à votre disposition les attributs d’états et de propriétés d’information (directement associés aux API d’Accessibilité des technologies d’assistance) et les attributs de rôle permettant de définir le rôle d’un élément (menu, contenu, pied de page, etc).

Les pages SharePoint 2010 sont compatibles XHTML (XHTML 1.0 Strict pour être plus précis). Néanmoins bien que vos pages soient bien formés, et le XHTML ne prévoyant pas l’intégration des informations WAI ARIA, leur seule présence entrainera une erreur lors de la validation par un validateur XHTML. Cela n’est qu’un détail, puisque le XHTML étant bien formé et composé avec des balises ARIA, la structure sera optimale pour les navigateurs et autres technologies d’assistance.

Pour cette version 2010 de SharePoint, Microsoft à améliorer l’accessibilité selon les points suivants :

  • Support du XHTML 1.0 / ARIA,
  • Nettoyage et suppression des tableaux pour être remplacé par des div et des calques CSS en se reposant pour la majorité du rendu sur le style CSS de la page maître,
  • Respect plus strict des standards et notamment de CSS,
  • Amélioration du support des navigateurs.

Parmi les évolutions notables qui faciliteront l’accessibilité mais aussi le travail des designers, vous pouvez trouver le rendu de la navigation globale intégralement réalisé en balises div, ul/li et span, les menus contextuels et les raccourcis clavier pour naviguer dans le ruban et la page d’accueil. Vous constaterez également la présence d’une sémantique aux éléments du ruban, des alertes, des éditeurs de texte, aux formulaires riches, des éditeurs de grille et aux boîtes de dialogues.

Par exemple, voici maintenant la sortie XHTML pour un éditeur de texte (fig. 3) :

<div… role="textbox" aria-haspopup="true" aria-autocomplete="both" aria-haspopup="true">

image
Fig. 3 – Editeur de contenu SharePoint 2010

Voici la façon dont est intégrer une commande du ruban de SharePoint 2010 (fig. 4) :

<a… role="button" aria-describedby="Ribbon.EditingTools.CPEditTab.Clipboard.Paste.Menu.Paste.Paste_ToolTip">

image 
Fig. 4 – Commande du ruban de SharePoint 2010

Au niveau des info-bulles, une balise SPAN est utilisée avec la propriété aria-hidden (élément caché)à faux par défaut (fig. 5) :

<span… id="Ribbon.EditingTools.CPEditTab.Clipboard.Paste.Menu.Paste.Paste_ToolTip" role="tooltip" aria-hidden="false">

image 
Fig. 5 – Info-bulle dans SharePoint 2010

Pour permettre à une technologie d’assistance d’identifier les boîtes de dialogue (fig. 6), une balise DIV est utilisée :

<div… role="dialog" aria-labeledby="dialogTitleSpan">

image 
Fig. 6 – Boîte de dialogue de SharePoint 2010.

Cette avancée majeure dans l’accessibilité confirme l’intérêt et l’effort que réalise Microsoft pour rendre accessible ses applications phare. Néanmoins, au-delà de Microsoft, la responsabilité de garder la syntaxe XHTML et les directives ARIA sera donné aux entreprises développant des composants tierces. Qu’à cela ne tienne, des validateurs de contenu accessible, à commencer par Visual Studio en personne, viendront aider les développeurs dans cette tâche.

Conclusion

Microsoft est sans nul doute moteur, voire précurseur, dans le domaine de l’accessibilité. Après avoir pris le taureau par les cornes dès Windows 2.0, voici que le géant de Redmond montre le chemin aux développeurs et aux autres plateformes concurrentes. Une initiative qui concrétise l’espoir de milliers de personnes de pouvoir enfin accéder dans de bonnes conditions à ces applications issues de la révolution du web 2.0.

Références

Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :
Posted: samedi 24 juillet 2010 09:35 par neodante

Commentaires

Gribouillon a dit :

C'est pas mal du tout ce que tu publies sur l'accessibilité en ce moment... merci :)

# juillet 24, 2010 15:44

neodante a dit :

Il y a tellement à faire ou à dire dans ce domaine que ce n'est qu'une toute petite contribution ! Merci à toi pour ton retour :)

# juillet 25, 2010 08:45
Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- Merci par Blog de Jérémy Jeanson le 10-01-2019, 20:47

- Office 365: Script PowerShell pour auditer l’usage des Office Groups de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 11:02

- Office 365: Script PowerShell pour auditer l’usage de Microsoft Teams de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 10:39

- Office 365: Script PowerShell pour auditer l’usage de OneDrive for Business de votre tenant par Blog Technique de Romelard Fabrice le 04-25-2019, 15:13

- Office 365: Script PowerShell pour auditer l’usage de SharePoint Online de votre tenant par Blog Technique de Romelard Fabrice le 02-27-2019, 13:39

- Office 365: Script PowerShell pour auditer l’usage d’Exchange Online de votre tenant par Blog Technique de Romelard Fabrice le 02-25-2019, 15:07

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Stream Portal par Blog Technique de Romelard Fabrice le 02-21-2019, 17:56

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Video Portal par Blog Technique de Romelard Fabrice le 02-18-2019, 18:56

- Office 365: Script PowerShell pour extraire les Audit Log basés sur des filtres fournis par Blog Technique de Romelard Fabrice le 01-28-2019, 16:13

- SharePoint Online: Script PowerShell pour désactiver l’Option IRM des sites SPO non autorisés par Blog Technique de Romelard Fabrice le 12-14-2018, 13:01