2013-04-10 92 views
0

我正試圖在Squish IDE上編寫測試以測試QT應用程序。我能夠使用Squish記錄測試,但我不知道如何用手寫同樣的東西?在python中擠壓測試以測試qt應用程序

下面是記錄的測試

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")) 

回答

1

你需要的startApplication線後設置一個斷點。在它下面放置一個打盹(5)。

程序中斷後,幾秒鐘後應用程序對象窗口將填充對象圖/層次結構。從這個層次結構中,可以線性訪問對象。每當你展開一個物體來看它的孩子時,這是一個更深的層次。

例子,讓我們說,我期待在應用對象窗口和所有我看到的是一個可點擊的右向箭頭標記: - > MainDeclarativeView

然後我點擊它,它擴展:

| MainDeclarativeView

- > SomeButton

我訪問SomeButton和它的屬性,像這樣:

則myButton = findObject( 「:MainDeclarativeView.SomeButton」)

注意在MainDeclarativeView和週期前的結腸指定SomeButton是MainDeclarativeView的子對象。現在,如果你這樣做:

鼠標點擊(爲myButton)

你會點擊它。你也可以把一個waitForObject作爲findObject的參數,然後在waitForObject中放入「:Main ....」,但根據我的經驗,它沒有任何區別。如果在「應用程序對象」菜單中無法看到該對象,則無法找到該對象並將其作爲對象分配給變量。

從此時起,您可以通過myButton訪問SomeButton的屬性,例如,

showMeX = myButton.x

希望幫助

0

使用截圖驗證點,以幫助您識別什麼是什麼。如果您在應用程序對象窗口中單擊對象的複選框,它們將(最終)填充到間諜頁面的單獨選項卡中。

+1

就我個人而言,我會避免屏幕截圖驗證點,這些從根本上'脆'。 UI中的任何更改都會「中斷」測試。 – PythonTester 2014-10-31 10:11:52

2

我個人使用的類定義PageObjects(取想法從黃瓜/硒) 包裝以限定小部件 和裝飾的功能用於登錄和加載模塊進行測試。這可以最大限度地重用代碼和最小的維護開銷。

這也意味着可以在寫入任何代碼之前創建測試,只要開發人員明白命名窗口小部件並預先定義它們即可。

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)

you will gai理解所使用的原則。