2010-05-13 15 views
2

J'ai une application graphique qui peut créer de nombreuses fenêtres similaires sur le bureau. Toutes les fenêtres ont le même titre. Je dois énumérer toutes les boîtes de dialogue avec le même titre et faire des tests sur chacune de ces boîtes de dialogue.pywinauto: prendre plus d'une application windows

Si je l'appelle:

dialog = app['Window Name'] 

pywinauto retourne un objet WindowSpecification qui est utile ainsi que l'accès à des contrôles par nom.

Quand j'appelle:

dialogs = app.windows_(title='Window Name') 

pywinauto me retourne une liste d'instances HwndWrapper qui ne sont pas si utiles. Comment obtenir une liste de fenêtres avec le titre spécifié, mais en tant qu'objets WindowSpecification?

Répondre

4

Vous ne pouvez pas vraiment. WindowSpecification est une spécification unique pour toutes les fenêtres qui correspondent aux critères fournis. Lorsque vous travaillez avec une instance de WindowSpecification, vous interagissez souvent avec une instance HwndWrapper que WindowSpecification trouve et accède pour vous.

Je pense que la réponse est de travailler avec par app.windows_() de la HwndWrapper retourné (similaire au HwndWrapper unique retourné par WindowSpecification.WrapperObject()

Remarque - si vous essayez toujours de limiter la liste des fenêtres en regardant des contrôles particuliers dans une fenêtre - puis en utilisant app ['Nom de la fenêtre'] ['Nom unique du contrôle']. Parent() devrait retourner la fenêtre. une spécification WindowSpecification ne doit pas encore exister, tandis qu'une instance HwndWrapper reflète un handle de fenêtre sous-jacent particulier, ce qui permet à WindowSpecification d'implémenter le code qui attend pour les fenêtres ou les contrôles s'ils existent.

+0

Avec HwndWrapper je ne peux pas les contrôles d'accès comme éléments du dictionnaire comme dialogue [ « fenêtre »] [ « contrôle »] est-il un moyen de sauter d'HwndWrapper à WindowSpecification? Mes fenêtres sont tous les mêmes, donc je ne peux pas de recherche et de saut pour parent :(Oui –

+0

- vous pouvez ws = WindowSpecification. ({ « Poignée »: hwnd_wrapper_instance.handle) Cela va créer un WindowSpecification qui correspond seulement un dialogue/contrôle (qui a cette poignée particulière). – markm