Ⅰ.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的可见范围内,但是如果用户滚动它就可以看见了。



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

解决app在没有上传app store前大规模安装测试问题的一些办法与思路

正常情况,做好一个苹果的app,要想让大众用户下载安装使用,都是上传到app store,用户登录app store找到你开发的app下载安装使用   但是app能否成功出现在苹果的ap...
  • u010175124
  • u010175124
  • 2013年12月11日 10:57
  • 5382

Extjs 在中获取window中items 的值,避免使用id

var forceInWin2 = new Ext.Window({ id : 'creatInWin2', title: "验证", widt...
  • zpryan
  • zpryan
  • 2015年02月05日 11:26
  • 1403

Vue.js学习 Item7 -- 条件渲染与列表渲染

v-if在字符串模板中,如 Handlebars,我们得像这样写一个条件块: {{#if ok}} Yes {{/if}}在 Vue.js,我们使用 v-if 指令实现同样的功能:Yes也可以用 ...
  • i10630226
  • i10630226
  • 2016年07月08日 00:10
  • 3007

Ⅰ.2.9.如何测试支持国际化的Qt AUT

Qt 支持创建国际化的应用程序。意思就是,举个例子,开发者可以创建一个Qt应用程序,在使用英语语言的地方(如U.S)该程序可以在menu选项和对话框标签上展示English文本,在用德语的地方显示Ge...
  • dzh0622
  • dzh0622
  • 2015年11月20日 10:17
  • 387

Ⅰ.2.6.4 如何测试 Table Widgets,以及使用外部数据文件(Qt 4)

这个部分,我们将了解如何测试 csvtable 程序。这个程序使用了 QTableWidget 来展现一个 .csv(以逗号间隔开值)文件的内容,它提供了基本的处理数据的功能——插入行、删除行、编辑格...
  • dzh0622
  • dzh0622
  • 2015年11月18日 13:58
  • 322

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

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

Ⅰ.18.3 如何在AUT中使用测试数据

到目前为止这个部分只讨论了在测试脚本中使用测试数据来创建数据驱动的测试。但是实践中出现了另外两个用例。一个用例是AUT读取测试数据文件。例如,假设我们正在使用addressbook AUT,想让它在测...
  • dzh0622
  • dzh0622
  • 2016年01月05日 15:53
  • 470

Ⅰ.19 如何实现自动化批量测试

这个部分将会阐释设置自动化测试运行的必要步骤,以及如何处理结果。 由创建一个处理Squish的测试结果的脚本开始(以XML格式输出),这个结果产生一个HTML文件,它包含的结果可以用web浏览区打开...
  • dzh0622
  • dzh0622
  • 2015年12月15日 13:35
  • 701

Ⅰ.16 如何编辑和调试测试脚本

除了记录和编辑测试脚本的工具,Squish也为调试测试脚本和检查AUT内部对象提供了支持。调试器不仅用于查找和修复测试脚本中的bug,而且还有助于检查一个运行中的AUT时使用断点功能。 Ⅰ.16.1...
  • dzh0622
  • dzh0622
  • 2015年11月25日 11:18
  • 377

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

烈火验真金,逆境磨意志——卢修斯?塞尼加 编写单元测试是一种验证行为,更是设计行为,更是编写文档行为。避免了反馈循环。 ★4.1测试驱动的开发方法 设计程序先编写测试方案,单元测试是检验程序功能...
  • wzhwho
  • wzhwho
  • 2011年10月23日 17:45
  • 537
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Ⅰ.2.6.3.5 如何测试 QTreeWidgets 中的 Items
举报原因:
原因补充:

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