0

QT アプリケーションをテストするために、Squish IDE で Python のテストを作成しようとしています。Squish を使用してテストを記録できましたが、同じものを手動で記述する方法がわかりません。

以下は記録されたテストです

def main():
    startApplication("hmi")
    mouseClick(waitForObject(":Setup_Text"), 18, 5, 0, Qt.LeftButton)
    activateItem(waitForObjectItem(":_QMenu", "Monitor setup       X"))
    mouseClick(waitForObject(":_Rectangle"), 33, 31, 0, Qt.LeftButton)
    activateItem(waitForObjectItem(":_QMenu", "ECG                X"))
    mouseClick(waitForObject(":_Rectangle_2"), 65, 66, 0, Qt.LeftButton)
    sendEvent("QCloseEvent", waitForObject(":_QDeclarativeView"))
4

4 に答える 4

2

個人的には、クラスを使用して PageObjects (cucumber/selenium から着想を得ています) を定義し、ラッパーを使用してウィジェットの機能を定義し、ログインしてテスト対象のモジュールをロードするためのデコレーターを使用します。これにより、コードを最大限に再利用し、メンテナンスのオーバーヘッドを最小限に抑えることができます。

また、開発者がウィジェットに賢明な名前を付けて事前に定義することを理解している限り、コードを作成する前にテストを作成できることも意味します。

from globals.widgets.QPushButton import QPushButtonWrapper # simple click functions
from globals.toolbars.sometoolbar import SomeToolBar

class SomeFormPO(PageObject): #PageObject has some "lazy ok and cancel methods"

    def __init__(self):
        name = <symbolic name>
        PageObject.__init__(self, name)

        self.some_tool_bar = SomeToolBar() # contains defines for toolbar e.g.
         #  self.some_button = QPushButtonWrapper(<symbolic name of button>)

次に、テストで:

from globals.path.login.login import LoginDecorator
from globals.path.pages import SomeFormPO


def main():
    """
    sensible test details

    """
    log_docstring(main)
    run()


@LoginDecorator
def run():

    some_form = SomeFormPO()

    test.verify(some_form.visible(), "some form is visible")
    some_form.some_tool_bar.some_button.click()

これはメソッドを完全に説明する場所ではありませんが、読んでいただければ:-

UI Tests with Cucumber (5 part blob series) <http://www.cheezyworld.com/2010/11/09/ui-tests-not-brittle/>_ (ルビー) Selenium on PageObjects <http://code.google.com/p/selenium/wiki/PageObjects> _ (Java)

使用される原則を理解することができます。

于 2013-07-23T11:08:52.113 に答える
1

startApplication 行の後にブレークポイントを設定する必要があります。そのすぐ下に snooze(5) を置きます。

プログラムが中断すると、数秒後に [アプリケーション オブジェクト] ウィンドウにオブジェクト マップ/階層が表示されます。この階層構造から、直線的にオブジェクトにアクセスします。オブジェクトを展開して子を表示するたびに、1 レベル深くなります。

例として、[アプリケーション オブジェクト] ウィンドウを見ているとします。表示されるのは、次のラベルが付いたクリック可能な右向きの矢印だけです。 -> MainDeclarativeView

次に、それをクリックすると展開されます。

| | MainDeclarativeView

-> いくつかのボタン

SomeButton とそのプロパティに次のようにアクセスします。

myButton = findObject(":MainDeclarativeView.SomeButton")

MainDeclarativeView の前のコロンと、SomeButton が MainDeclarativeView の子オブジェクトであることを指定するピリオドに注意してください。今、あなたがするならば:

mouseClick(マイボタン)

クリックします。また、findObject のパラメーターとして waitForObject を入れてから、waitForObject 内に ":Main...." を入れることもできますが、私の経験では違いはありません。オブジェクトが [アプリケーション オブジェクト] メニューに表示されない場合は、そのオブジェクトが見つからず、オブジェクトとして変数に割り当てられません。

この時点から、myButton を介して SomeButton のプロパティにアクセスできます。

showMeX = myButton.x

それが役立つことを願っています

于 2013-04-20T03:45:06.430 に答える
0

要素を調べて、実際の/記号名を取得することもできます。これは (簡単に言えば) Squish がオブジェクトを識別する方法です。

要素を検査するには、実行中のテストを一時停止します。Squish IDE が再び開き、右上隅にTest Debuggingタブが表示されます。このビューに切り替えると、左下隅にアプリケーション オブジェクトが表示されます。チェックボックスを押すと、選択したオブジェクトが表示されます。オブジェクトを右クリックして、実名/記号名をコピーすることもできます。

オブジェクトを選択すると、そのプロパティとメソッドを読み取ることもできます。通常は、Application Context のすぐ隣のウィンドウに表示されます。

于 2019-05-06T09:10:24.010 に答える