Ⅰ.2.6.3.5 如何测试 QTreeWidgets 中的 Items

原创 2015年11月18日 09:33:15

tree widgets (tree views中显示的models)比list和table widgets难测试一些。这事因为trees有一个比较复杂的基础结构。这个结构本质上是这样的:一系列的行(顶层items),每行有一个或多个列,每列有自己的子items。每个子item有一个或多个列,并且有自己的子items,以此类推。

遍历tree的最简单的方法就是使用递归程序(即,调用自己的程序),从tree的可见的root item开始,然后访问每个item的子items,以及它们的子items,以此类推。下面有一个例子。(注意到当在一个测试中有定义多个函数时,Squish总是调用main函数,这个函数可以调用其他的函数。)

Example 6.11 The tst_treewidget  Test Script

def checkAnItem(indent, item, root):
    if indent > -1:
        checkd = selected = ""
        if item.checkState(0) == Qt.Checked:
            checked = " +checked"
        if item.isSelected():
            selected = " +selected"
        test.log("|%s'%s'%s%s" %(""*indent, item.text(0), checked, selected))
    else:
        indent = -4
    #only show visible child items
    if item != root and item.isExpanded() or item==root:
        for row in range(item.childCount()):
            checkAnItem(indent+4, item.child(row), root)

def main():
    startApplication("itemviews")
    treeWidgetName = "{type='QTreeWidget' unnamed='1' visible='1'}"
    treeWidget = waitForObject(treeWidgetName)
    root = treeWidget.invisibleRoorItem()
    checkAnItem(-1, root, root)
当打印到Squish的log中时,缩进纯粹用于显示tree的结构,以|开头是因为正常Squish会自动从log信息的尾部去掉空格,而我们不想这样做。例如:

|’Green algae’
|<span style="white-space:pre">	</span>’Chlorophytes’
|<span style="white-space:pre">		</span>’Chlorophyceae’
|<span style="white-space:pre">		</span>’Ulvophyceae’
| <span style="white-space:pre">		</span>’Trebouxiophyceae’
| <span style="white-space:pre">	</span>’Desmids & Charophytes’
| <span style="white-space:pre">		</span>’Closteriaceae’ +checked
|<span style="white-space:pre">		</span> ’Desmidiaceae’
| <span style="white-space:pre">		</span>’Gonaozygaceae’ +selected
| <span style="white-space:pre">		</span>’Peniaceae’
|’Bryophytes’
|’Pteridophytes’
| <span style="white-space:pre">	</span>’Club Mosses’
| <span style="white-space:pre">	</span>’Ferns’
|’Seed plants’
| <span style="white-space:pre">	</span>’Cycads’ +checked +selected
| <span style="white-space:pre">	</span>’Ginkgo’
| <span style="white-space:pre">	</span>’Conifers’
| <span style="white-space:pre">	</span>’Gnetophytes’
| <span style="white-space:pre">	</span>’Flowering Plants’
上例中,注意到我们只检查了第一列的items,如果需要检查其他列的items,我们必须引入循环来遍历所有的列并使用一个列索引而不是简单的使用0(表示第一列)。

另一个需要注意的地方就是‘Bryophytes’这条记录事实上有三个子items(’Liverworts‘、‘Hornworts’、‘Mosses’),但是这些items没有出现,因为‘Bryophytes’ item被折叠起来了(并没有显示其子孙items,有一个+号来表示这个item可以被展开,相反的说明了其他的已经被展开了)。在代码中我们忽略了不可见的子items,如果当前item是tree的root(即,理论上的顶层items的parent)或者,如果当前item不是root,但已经被展开了(意味着它的子items是可见的),要做到忽略不可见的子items这一点只需要调用checkAnItem函数即可。我们当然可以不忽略不可见的的子items,只需要移除 checkAnItem 函数的最后一个if语句即可。

记住,即使一个item是可见的,它也有可能对用户不可见,例如,如果一个item不在tree的可见范围内,但是如果用户滚动它就可以看见了。



版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Ⅰ.2.6.7 如何测试QListView (Qt 3)

这个部分介绍了如何验证一个Qt 3 list view widget(事实上是个tree widget)包含了我们所期望的items。 一种方法是遍历list view中的所有items,检查它们的每...
  • dzh0622
  • dzh0622
  • 2015年11月19日 09:41
  • 225

第Ⅰ部分 敏捷开发 第4章 测试

烈火验真金,逆境磨意志——卢修斯?塞尼加 编写单元测试是一种验证行为,更是设计行为,更是编写文档行为。避免了反馈循环。 ★4.1测试驱动的开发方法 设计程序先编写测试方案,单元测试是检验程序功能...
  • wzhwho
  • wzhwho
  • 2011年10月23日 17:45
  • 517

Ⅰ.7 如何从一个测试脚本中测试多个AUT,使用ApplicationContext

通常,为每个测试套件指定单个被测试的应用程序。然后通过每个测试案例执行和访问这个AUT。所有的教程展示了单个测试套件方法或单个AUT方法,但是事实上,有可能开始多应用程序以及访问,以及在单个测试套件内...
  • dzh0622
  • dzh0622
  • 2015年11月21日 22:23
  • 478

OCJP-TestReal[1]讲解.310-065.244.Items

  • 2013年12月25日 14:44
  • 4.61MB
  • 下载

mtl_system_items_b表中的栏位与界面栏位对应

Introduction The basic table mtl_system_items_b is the basic table of item in ERP system and there ...

CSS3弹性布局align-items和align-self垂直轴方向行对齐属性详解及实例

弹性项目可以按弹性容器当前行的cross axis来对齐,和justify-content类似,但在垂直方向上。其中align-items属性用于弹性容器,而align-self用于弹性项目。 ali...
  • iefreer
  • iefreer
  • 2016年03月01日 22:26
  • 9425

OAF中的regions和items类型

  • 2014年10月17日 18:15
  • 16KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Ⅰ.2.6.3.5 如何测试 QTreeWidgets 中的 Items
举报原因:
原因补充:

(最多只允许输入30个字)