2015-09-21 1 views
0

J'ai besoin d'automatiser un flux de travail et j'ai essayé de me reposer sur teststack white et UIA Verify pour trouver les boutons dans une autre application. Cependant, lorsque j'essaie d'identifier les boutons, j'ai été accueilli avec des propriétés de noms vides pour les contrôles dans la fenêtre que je dois contrôler (voir la capture d'écran ci-jointe). Les contrôles sont apparemment de type Custom. Je veux être en mesure d'appuyer sur des boutons et entrer du texte dans des zones de texte ainsi que de cocher une case.UIA Verify ne montre aucune propriété de nom pour les boutons

Y a-t-il un moyen? Puis-je y accéder par exemple par un index (par exemple, bouton = troisième contrôle dans la fenêtre)?

Screenshot of UIA Verify, showing the empty controls

Edit: Comme demandé une capture d'écran de inspect.exe Screenshot of Inspect.exe

Répondre

2

Pourriez-vous jeter un oeil à ces contrôles avec Inspect.exe et affichant une capture d'écran des properites? Vous pourriez être en mesure de trouver une autre propriété unique sur eux pour l'identifier. Inspect.exe peut être trouvé C: \ Program Files (x86) \ Windows Kits \ 8.1 \ bin \ x64 \ inspect.exe.

Avec White vous ne serez pas en mesure d'obtenir une collection de tous les boutons, mais avec ui-automation brute, vous serez en mesure d'obtenir une collection de AutomationElements en utilisant FindAll.

Voici un exemple d'obtention de tous les contrôles d'un certain type. Retrieve Multiple UIItems ByClassName

Edit: Alors après avoir regardé l'image mise à jour de l'inspection, je crains l'application que vous essayez d'automatiser ne pas exposer leur application à ui automatisation correctement. J'étais certain qu'il n'avait pas été exposé correctement auparavant, mais j'espérais qu'ils pourraient avoir accidentellement exposé certaines propriétés. J'ai déjà vu cela avec des contrôles de 3ème partie pour VB6. Il serait possible d'utiliser la technique que j'ai liée ci-dessus pour obtenir tous les contrôles avec un nom de "" mais vous devrez utiliser la propriété rectangle de délimitation pour déplacer votre souris à la position correcte et cliquer (si cette propriété rapporte la bonne position) puisque je voudrais wagger le invoke pattern n'est pas supporté. Si vous avez accès au code source, vous pouvez implémenter ces propriétés et ce modèle.

+0

Merci pour votre publication, j'ai mis en ligne un second screen. Je ne pouvais pas trouver une différence dans les contrôles en dehors des changements évidents dans "BoundRectangle" et Legacy.Accessible.State. –

+0

Malheureusement, je n'ai pas accès au code source. J'utilise déjà une technique de détournement de souris mais je voulais une méthode plus sophistiquée - c'est pourquoi j'ai regardé le blanc. Eh bien, je suppose que je dois juste m'en tenir à cela. Merci quand même - au moins je sais maintenant qu'il n'y a pas de meilleure façon de le faire :) –