J'ai un faisceau de test qui s'exécute dans un moteur IronPython intégré dans notre application C#. Certains des tests sont l'automatisation de l'interface utilisateur qui simulent les clics de bouton, etc.cast existant Sous-classe de IPy
# assume code to find an existing button, 'b' is an instance of System.Windows.Forms.Button
b.OnClick(EventArgs())
La question que j'ai est que le code ci-dessus fonctionne sur ipy 2.0.2 et non sur 2,6. En lisant le lien ci-dessous, je peux voir pourquoi ça ne marche plus.
http://dlr.codeplex.com/Thread/View.aspx?ThreadId=57324
Je créé un sublclass python comme suit:
class PyButton(Button):pass
Cela fonctionne bien si vous allez créer une nouvelle instance de PyButton et tenter onclick(). Cependant, dans mon cas, je dois effectuer un OnClick sur un bouton existant. Essentiellement, je veux faire ce qui suit, pour me permettre de simuler le clic sur le bouton:
- obtenir une référence à bouton WinForms existants
- Cast/bouton Convertir à la sous-classe PyButton personnalisée (pour permettre OnClick)
- Appel onclick
J'ai essayé d'utiliser clr.Convert:
import clr
from System.Windows.Forms import *
class PyButton(Button):pass
# assume b = existing button
pb = clr.Convert(b, clr.GetClrType(PyButton))
... mais je reçois cette erreur:
expected Button_2$2, got Button
input was pb = clr.Convert(b, clr.GetClrType(PyButton))
Hélas - Button.PerformClick() fonctionne très bien dans le cas de Button, mais il me semble que le bouton est le seul contrôle avec cette méthode. Dans le cas plus général, je dois également faire des clics sur d'autres objets, tels que des éléments de menu. J'ai fini par utiliser la réflexion pour accéder à OnClick (ainsi qu'à certains des autres événements de saisie de l'utilisateur). Merci! –