0

このダイアログが表示されるのにちょうど間に合うように、新しいダイアログに含まれるボタンを押したいとしましょう。イベントハンドラーはどのように見えるべきですか?

例:

def handleMyNewDialogAppeared():
    mouseClick(waitForObject(":MyButtonOnNewDialog"), MouseButton.LeftButton)

def main():
    startApplication("myapp")
    installEventHandler("if dialog :MyNewDialog appeared", 
                        "handleMyNewDialogAppeared")
4

2 に答える 2

0

Squish の eventHandler を使用したことがありません。これの代わりに (私の問題は、すべてのオブジェクトが動的であることです)、カスタムの待機関数を作成しました。フォーム/タイプに関係なく、すべてのオブジェクトに対して機能します。

この関数は、オブジェクトが true になるまで待機します。

def whileObjectFalse(objectID, log = True):
    # functions enters in a while state, as long as expected object is FALSE, exiting when object is TRUE 
    # (default timeout of [20s])

    start = time.time()# START timer
    counter = 40
    object_exists = object.exists(objectID)
    while object_exists == False:
        object_exists = object.exists(objectID)
        snooze(0.5)
        counter -= 1
        if counter == 0:
            test.fail(" >> ERR: in finding the object [%s]. Default timeout of [20s] reached!" % objectID)
            return
    if log == True:
        elapsed = (time.time() - start)# STOP timer
        test.log("    (whileObjectFalse(): waited [%s] after object [%s])" % (elapsed, objectID))
    snooze(0.5)

基本的に、コードは次のようになります。

def whileObjectFalse(objectID, log = True):
        start = time.time()# START timer
        counter = 40
        object_exists = object.exists(objectID)
        while object_exists == False:
            object_exists = object.exists(objectID)
            snooze(0.5)
            counter -= 1
            if counter == 0:
                test.fail(" >> ERR: in finding the object [%s]. Default timeout of [20s] reached!" % objectID)
                return
        if log == True:
            elapsed = (time.time() - start)# STOP timer
            test.log("    (whileObjectFalse(): waited [%s] after object [%s])" % (elapsed, objectID))
        snooze(0.5)


def main():
    startApplication("myapp")
    whileObjectFalse("NewDialog")
    mouseClick(waitForObject(":MyButtonOnNewDialog"), MouseButton.LeftButton)
于 2015-09-11T11:15:46.373 に答える
0

そのために「DialogOpened」という名前の特定のイベントがありますが、すべてのダイアログをフックします。次に、次のように、必要なダイアログであるかどうかをハンドラーで確認できます。

def handleMyNewDialogAppeared(Dialog):
    if str(Dialog.windowTitle) == "My Dialog's Title":  # whatever suits your needs
        mouseClick(waitForObject(":MyButtonOnNewDialog"), MouseButton.LeftButton)

def main():
    startApplication("myapp")
    installEventHandler("DialogOpened", "handleMyNewDialogAppeared")

ただし、私は Qt のスキッシュしか持っていないため、これを Windows で確認することはできません。

于 2015-11-05T11:37:07.097 に答える