Comment manipuler un contrôle sans aucun motif implémenté?

J’essaie de mettre en œuvre le test d’automatisation via UIAutomation pour notre projet. Mais bon nombre de contrôles ne sont pas en stand-by et les modèles appropriés ne sont pas non plus appliqués pour ces contrôles. Comment dois-je manipuler les contrôles via le framework UIAutomation dans ce cas?

Par exemple, un bouton de notre produit est implémenté via un volet et le motif appelé n’est pas également implémenté. Comment dois-je cliquer sur le bouton? (Pour éviter d’installer VS sur la machine de test, je ne souhaite pas utiliser Mouse.Click() dans l’espace de noms Microsoft.VisiualStudio.TestTools.UITesting ) Y a-t-il un moyen de le faire uniquement à l’aide du framework UIAutomation ou de quelque chose d’autre incorporé dans .net cadre? Merci d’avance! (Si le modèle approprié est implémenté, le code ci-dessous fonctionnera. Et en tant que nouvel utilisateur, je ne peux pas poster la capture d’écran pour votre référence, désolé!)

 object temp = null; if (btnTest.TryGetCurrentPattern(InvokePattern.Pattern, out temp)) { InvokePattern btnTestPattern = temp as InvokePattern; btnTestPattern.Invoke(); } 

Le seul moyen d’interagir lorsque les schémas de contrôle ne sont pas implémentés consiste à cliquer sur des éléments. Je suggère d’essayer de suivre pour éviter les erreurs maximales.

  1. Avant d’envoyer le clic, assurez-vous que le parent du bouton (le volet ou la fenêtre est défini sur premier plan)
  2. Au lieu d’envoyer le clic au coin de AutomationElement, essayez de l’envoyer au milieu de l’élément,
  3. Essayez également de survoler l’élément en premier, l’attendre comme 200 ms, puis d’envoyer un clic pour que l’exécution soit garantie. [Faites-moi confiance, cela aide beaucoup au débogage et évite de nombreux problèmes.]

La meilleure chose à faire serait que ceux qui mettent en œuvre le système implémentent le fournisseur UIA côté serveur dans leurs éléments d’interface utilisateur !

Mais souvent ce n’est pas possible …, j’ai utilisé la solution suivante (du moins pour cliquer / basculer):

 AutomationElement yourAE = ...// some code to find the right AutomationElement (AE) clickablePoint = yourAE.GetClickablePoint(); 

BoundingRectangleProperty pourrait aussi être utile

Si vous recevez ce point cliquable, vous pouvez utiliser

 System.Windows.Forms.Cursor.Position = new System.Drawing.Point((int)clickablePoint.X, (int)clickablePoint.Y); 

pour vous déplacer à l’emplacement, puis cliquez dessus via InputSimulator ou des commandes win32 (user32.dll). (Remarque: bien sûr, vous pouvez également utiliser InputSimulator ou win32 pour déplacer la souris – mais j’avais quelques problèmes avec InputSimulator lorsqu’il s’agissait de plusieurs écrans avec différents emplacements ou résolutions – donc Cursor.Position était l’approche la plus simple, qui est également très fiable)