3

このトピックに関して別の質問を見ましたが、私のために機能する情報を完全に得ることができなかったので、私は私の詳細を与えると思いました-私は近視眼的であると思います。

テストフレームワークからGUIを実行しようとしています。これには、テストスクリプト内でイベント(この場合はボタンを押す)を手動で呼び出すことが含まれます。これまでのところ、他の無関係なガフに加えて、私は持っています:

# In GUI class:

self.button_1 = wx.Button(self, id=wx.ID_ANY, label="Button 1")
self.button_1.Bind(wx.EVT_BUTTON, self.button_1)

# In GUI Test class:

event = wx.PyCommandEvent(X, Y)
wx.PostEvent(get_gui_instance(), event)

X私の問題は、私が何をすべきかわからないことですY(残りは大丈夫だと仮定して)。どんな助けでも大歓迎です。

4

3 に答える 3

5
btnInfo = wx.Button(self,-1,"Some Button")

evt = wx.PyCommandEvent(wx.EVT_BUTTON.typeId,btnInfo.GetId())
wx.PostEvent(self, evt)  #attach event to self ... alternatively maybe attach to btnInfo

動作するはずです

于 2012-10-08T17:51:36.040 に答える
1

つまり、GUIを再調整してGUIテストのワーカースレッドで実行するようにしたので、GUIと直接通信できることがわかりました。私はこれを以前に認識していたはずですが、それでも結果は、同じプロセスで実行されているため、GUIテストからGUIへのイベントの投稿を気にする必要がないということです。

代わりに、イベントの効果を直接呼び出すことができるようになりました。たとえばon_button_press()、ボタンの実際のクリックをバイパスして、を呼び出すことができます。これは通常、wxPythonでイベントを発生させます。これにより、ユーザーインタラクションをシミュレートし、ワークフローと入力範囲をテストできます。これはまさに私がやりたかったことです。

もちろん、これは、テストスイートと同じプロセスでGUIを実行しているためにのみ機能します。イベントの投稿はそれ以外の方法のようです。私自身の質問に答えると、カスタムイベントは、ボタンを押してクロスプロセスを呼び出す方法のようです。これは、GUI内で何らかの「テストエージェント」を使用して、テストに固有のイベントを処理することを意味します。

于 2012-10-09T10:31:01.947 に答える
0
import wx

class MessageDialog(wx.Dialog):
    def __init__(self, message, title, tiempo = 2000):

        style = wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER
        super(MessageDialog, self).__init__(None, -1, title, style=style)
        text = wx.StaticText(self, -1, message)

        fuente = wx.Font(pointSize = 20, 
                     family = wx.DEFAULT, 
                     style = wx.NORMAL, 
                     weight = wx.LIGHT, 
                     underline=False, 
                     faceName="", 
                     encoding=wx.FONTENCODING_DEFAULT)        
        text.SetFont(fuente)




        self.ok = wx.Button(self, wx.ID_OK, "OK")
        sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(text,0,wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL,5)
        sizer.Add(self.ok, 0, wx.EXPAND|wx.ALL, 5)
        self.SetSizerAndFit(sizer)
        color = "WHEAT"
        self.SetBackgroundColour(color)
        self.Center()
        self.Refresh()
        wx.FutureCall(tiempo,self.salir_ok)

    def salir_ok(self):
        par_btn = getattr(self, "ok")
        evt = wx.PyCommandEvent(wx.EVT_BUTTON.typeId, par_btn.GetId())
        wx.PostEvent(self, evt)
        return

if __name__ == '__main__':
    app = wx.App()
    dialog = MessageDialog( 'Teclee el nombre del proveedor', 'Proveedor')

    dialog.ShowModal()
    dialog.Destroy()
    app.MainLoop()
于 2016-11-23T23:32:19.607 に答える