0

我正在尝试在 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

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 行之后设置断点。在它下面放一个贪睡(5)。

一旦程序中断,几秒钟后,应用程序对象窗口将填充对象映射/层次结构。通过这种层次结构,您可以以线性方式访问对象。每次您扩展一个对象以查看它的子对象时,都会更深一层。

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

然后我点击它,它会展开:

| 主声明视图

-> 一些按钮

我访问 SomeButton 及其属性,如下所示:

myButton = findObject(":MainDeclarativeView.SomeButton")

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

鼠标单击(我的按钮)

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

从此时起,您可以通过 myButton 访问 SomeButton 的属性,例如

showMeX = myButton.x

希望有帮助

于 2013-04-20T03:45:06.430 回答
0

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

于 2013-04-20T03:52:54.033 回答
0

您还可以检查元素并获取它们的真实/符号名称。这是(简单地说)Squish 识别对象的方式。

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

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

于 2019-05-06T09:10:24.010 回答