在python中进行Squish测试以测试qt应用程序

时间:2013-04-10 07:47:59

标签: python qt testing squish

我正在尝试在Squish IDE上编写python测试以测试QT应用程序。我能够使用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 个答案:

答案 0 :(得分: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/> _ (Ruby) Selenium on PageObjects <http://code.google.com/p/selenium/wiki/PageObjects> _ (Java)

您将了解所使用的原则。

答案 1 :(得分:1)

您需要在startApplication行之后设置断点。在它下面放一个小睡(5)。

程序中断后,几秒钟后,“应用程序对象”窗口将填充对象图/层次结构。从此层次结构中,您可以以线性方式访问对象。每当你展开一个对象来看它的孩子时,那就更深了一层。

示例,假设我正在查看“应用程序对象”窗口,我看到的是一个可点击的右箭头标记为: - &GT; MainDeclarativeView

然后我点击它然后展开:

| MainDeclarativeView

- &GT; SomeButton

我访问SomeButton及其属性如下:

myButton = findObject(“:MainDeclarativeView.SomeButton”)

请注意MainDeclarativeView前面的冒号以及指定SomeButton是MainDeclarativeView的子对象的句点。现在,如果你这样做:

鼠标点击(myButton的)

您将点击它。您还可以将waitForObject作为参数放入findObject,然后将“:Main ....”放在waitForObject中,但根据我的经验,它并没有什么不同。如果在“应用程序对象”菜单中无法看到该对象,则无法找到该对象并将其作为对象分配给变量。

从现在开始,您可以通过myButton访问SomeButton的属性,例如

showMeX = myButton.x

希望有所帮助

答案 2 :(得分:0)

使用屏幕截图验证点来帮助您确定什么是什么。如果单击应用程序对象窗口中的对象复选框,它们将(最终)填充在Spy页面上的单独选项卡中。

答案 3 :(得分:0)

您还可以检查元素并获取其真实/符号名称。 这是Squish识别对象的方式(说的很容易)。

要检查元素,请暂停您正在运行的测试。 Squish IDE将再次打开,并在右上角中找到选项卡 Test Debugging 。 切换到该视图,您将在左下角中找到 Application Objects 。 按下复选框,将显示所选对象。 您还可以右键单击该对象,然后复制真实/符号名称。

选择对象时,您还可以阅读其属性和方法。通常,它显示在“应用程序上下文”旁边的窗口中。