我正在尝试在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"))
答案 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
然后我点击它然后展开:
我访问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 。 按下复选框,将显示所选对象。 您还可以右键单击该对象,然后复制真实/符号名称。
选择对象时,您还可以阅读其属性和方法。通常,它显示在“应用程序上下文”旁边的窗口中。