2010-07-27 4 views
1

Je travaille sur un test d'interface graphique scripté pour une application Windows C# .net. J'utilise Ruby pour conduire les tests et mes pieds sont officiellement mouillés dans les royaumes de WIN32API - mais je ne suis certainement pas trop confiant avec cela. En fait, j'ai l'impression de manquer de compréhension fondamentale. À ce stade, la seule façon de savoir comment accéder aux différents contrôles est de combiner la classe de contrôle et peut-être un texte d'identification.Trouver un bouton spécifique avec Rubin's WIN32API

Mon problème est, l'application que j'ai à tester a une série de plusieurs boutons - qui contiennent tous une icône et aucun texte.

Existe-t-il une méthode que je pourrais utiliser pour récupérer un bouton spécifique? J'ai joué avec la notion de faire cela par le biais du positionnement relatif, mais ce genre de craint, et je ne suis pas super intéressé par cela.

J'ai accès au code source; S'il y a un attribut/une propriété d'identification que je peux définir, je suis plus que disposé. Je suis simplement ignorant à ce stade.

Répondre

0

Malheureusement, il est sans doute pas facile . Vous voudrez énumérer toutes les fenêtres et leurs enfants et chercher des «indices» quant à celui qui est le bouton que vous voulez en quelque sorte, tout en utilisant le win32api.

Un exemple de "énumération de toutes les fenêtres" peut être trouvé dans win32screenshot (cherchez "window_titles").

http://github.com/rdp/win32screenshot

-r

+0

Grrrr .... Comme vous l'avez dit pas facile. Il n'y a vraiment pas de réponse à ce problème. Énumérer tous les enfants est la seule option faisable que j'ai trouvée à ce stade, et les «indices» auxquels j'ai dû recourir sont un positionnement relatif. L'utilisation de ceci comme un framework de test Windows devient rapidement une non-option. Vraiment décevant, j'attendais ça avec impatience. Merci pour la tentative. –

+0

ouais. La dernière version de win32screenshotprint gem a quelques "helpers" dans la classe Win32 :: Screenshot :: Util, si c'est de l'aide. – rogerdpack

-1

Ok, s'il y a une icône alors vous pouvez aller sur la page et voir le code. Ensuite, découvrez le nom de l'icône du bouton dans le code de la vue. Vous obtenez le paramètre scr et alt, puis copiez le nom et le passé dans le code suivant.

ie.image (: src/nom de l'icône /). Cliquez

ou

ie.image (: alt,/nom de l'icône /). Cliquez sur

+0

Il s'agit d'une application think windows, non rendue dans un navigateur. –

0

UI Automation comme celui-ci est un PITA. Je ne connais pas Ruby, donc je ne peux pas vous aider avec des détails, mais je peux vous donner quelques informations sur le dernier harnais à base de gui que j'ai écrit. Cela a été fait en C# et j'ai utilisé System.Runtime.InteropServices pour accéder à diverses fonctions dans le user32.dll.

J'ai alors pu construire différentes méthodes qui ont obtenu le handle des différents éléments GUI. Souvent, il s'agissait d'obtenir le handle de la fenêtre parent puis des enfants associés jusqu'à ce que j'obtienne le bon contrôle, puis j'utilisais le handle pour effectuer toutes les fonctions nécessaires sur ce contrôle. Un outil comme Spy ++ ou WinID est très utile pour voir quelles sont les relations entre les contrôles enfant et parent, ainsi que savoir si vous obtenez le bon handle que vous construisez votre harnais.

Désolé, je ne peux pas vous aider directement.

+0

Vous avez raison de dire que c'est un PITA. Je tirais déjà parti de Spy ++, mais le meilleur qui vous donne est une poignée de contrôle. Mon problème est, j'ai 7 boutons qui sont tous les enfants du même parent (les boutons ont tous le même type de contrôle). Je dois les énumérer. Merci pour l'essai. –

Questions connexes