2009-08-20 29 views
1

J'utilise White pour piloter l'interface utilisateur d'une application WPF, et cela a bien fonctionné jusqu'à présent. Je suis au point cependant, où j'ai besoin de piquer dans l'état interne de l'application testée pour vérifier certaines conditions. En particulier, j'ai un DataGrid (du WPFToolkit), qui est databound à un List<MyBusinessObject>. Chaque ligne a donc DataContext d'un MyBusinessObjectComment puis-je obtenir DataContext d'un contrôle à partir d'une application externe utilisant UI Automation (et/ou Blanc)

Je peux obtenir la grille en utilisant le blanc en le trouvant avec son ID d'automatisation.

Je peux alors faire ceci:

var row = Grid.Rows[0] 
row.AutomationElement.Current.Name 

qui retourne la chaîne "MyCompany.Namespace.MyBusinessObject", donc je suis presque là-bas, mais je ne peux pas vraiment l'objet d'affaires réel lui-même.

Je l'ai regardé dans WPF UIAutomation AutomationPeers (à partir d'un AutomationPeer, vous pouvez obtenir la propriété Owner, qui est l'objet d'affaires réel), mais il semble que vous devez être en cours d'utiliser ceux-ci, comme tous avoir des constructeurs qui nécessitent de fournir le contrôle WPF.

Y a-t-il un moyen de construire un AutomationPeer à partir d'un processus externe, ou d'effectuer un zoom avant sur le DataContext réel d'un contrôle WPF?

Répondre

3

Je ne pense pas que vous pouvez. La seule façon d'échanger des informations à l'aide d'UI Automation est de passer par les fournisseurs prédéfinis. Ils se concentrent sur l'interface utilisateur et sur ce qu'elle affiche, pas sur les données: vous n'échangez jamais d'objets réels entre votre application et votre application de test.

Je pense que le plus proche que vous pouvez obtenir, en utilisant UIA, est d'encoder votre BusinessObject, ou au moins les données pertinentes, dans une chaîne et de récupérer cette chaîne en utilisant le ValuePattern.

3

ItemStatus (Attached Property)

Cette propriété permet à un client pour déterminer si un élément est transmettait statut concernant un article. Par exemple, un élément associé à un contact dans une application de messagerie peut être "Occupé" ou "Connecté".

Vous ne pouvez pas récupérer la classe sous-jacente, vous ne pouvez obtenir que des informations d'interface utilisateur. Mais, le Peer Automation pour votre classe affaires peut exposer un Item Status. Vous pouvez mettre une chaîne simple là ou even XML.