博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
OpenTest:CodedUI如何支持下拉树形列表选择?
阅读量:6318 次
发布时间:2019-06-22

本文共 3795 字,大约阅读时间需要 12 分钟。

  在 中介绍了中的OpenTest自动化测试的语法,其中对于下拉树形列表在最后语法表格中标记为不支持,现在OpenTest支持下拉树形列表了,本篇介绍一下如何在Win7下支持下拉树形列表。

支持功能

  OEA中自己写了一个ComboGrid,这个Grid是从ComboBox继承下来的,下图中的项目信息和合同科目是两个下拉控件,项目信息是下拉列表,合同科目是下拉树形列表。自动化测试框架需要支持给下拉控制赋值。

2010071513441151.png

脚本

  OpenTest自动化测试框架是一个DSL测试框架,在编写框架代码之前就已经确定了脚本语法要尽量简单易懂,对于下拉列表的支持我把脚本语法示例定义如下:

属性编辑器("项目信息", :下拉列表).下拉选择("江南四期1、4区项目")属性编辑器("合同科目", :下拉树形列表).下拉选择("建安工程类合同/建安工程和总包管理配合服务")

开始实现方式:下拉后扩展树形节点进行选择

  给下拉列表赋值,我在Vista下实现时时通过模拟用户操作的步骤来实现的,例如要给合同科目选择建安工程类合同/建安工程和总包管理配合服务,我是先点击下拉控件,在下拉Popup中扩展第一级节点建安工程类合同,然后再选择第二级别节点建安工程和总包管理配合服务

对于下拉树形列表大致代码如下:

 

def 下拉选择(title)    单击    tree = 主窗口.树形列表(self.name, "DropDownGrid:")    tree.选择行(title)  end

 

 

class TreeTestObject < GridTestObject  def 选择行(title)    path = title.split("/")    if path.length == 1      r = 行(title)      r.Selected = true unless r.Selected == true    else      r = 行(path[0])      r.扩展      path[1..-2].each{|row_title|        r = r.行(row_title)        r.扩展      }      r = r.行(path[-1])      r.Selected = true unless r.Selected == true    end    r  end  #对象:行  def 行(title)    #行号    puts "行名称:" + title    tree_item = WpfTreeItem.new(@test_control)    tree_item.SearchProperties["Name"] = title    r = TreeItemTestObject.new(tree_item)    r.name = title    r  endend

 

  下拉树形列表其实在XP下已经运行正常,但是由于我前一阵子安装了Vista的机器很慢,终于忍受不住了装了Win7,而下拉树形列表在Win7下就不怎么听话了。当我执行到扩展时,你会发现树形控件会先选择当前行并自动扩展一次,后来经过网上资料查找,发现对MenuItem有一个说明. MenuItem Navigation is not correct unless the MenuItem has been expanded atleast once.,所以我猜测对于树形控件,这可能也是CodedUI内部的机制,在正确使用之前,它会先自动选择并扩展一次。但是这个对我来说是致命性的错误,因为选择后下拉列表会认为你选择了这个节点而关闭popup,这样就会导致选择下一子节点时由于找不到popup控件而报错。

 

  下拉树形列表控件对于OEA来说,是基础控件,自动化测试支持它那是必须的,而现在出现了这种异常,我能做的只是去想办法去解决。由于对CodedUI内部没有进行学习,所以只能靠瞎猜测并快速验证了,我想到了以下几种情况:

  • 是否可以通过设置exe程序的兼容性来达到正确执行: 验证不通过,设置兼容性后仍然
    2010071514065641.png
  • 是否可以选择一个节点后,再模拟点击一次控件再次弹出popup后再选择下一节点:验证不通过,即使通过了这种方式也不好
  • 更改Expand方法,改模拟按+展开为使用WpfTreeItem的Expand属性:验证不通过,仍旧不行:(
  • 不使用CodedUI类库提供功能,直接使用Automation功能:考虑了一下,不想通过此方法进行,因为即使可以找到,需要自己处理的东西还有很多,如EnsureClickable等,所以没有验证此方案
  • 通过其他模拟输入方式来解决:这个也是最终方案,具体细节看下面介绍

最终方案:直接输入字符串赋值

  通过以上几种猜测,发现都试不通,都弄了快两天了,计划这周我就要搞定自动化测试框架,还需要教给测试人员使用呢,我可没有时间再在这里纠结了,于是我放弃了通过下拉选择的实现方式,而改为通过直接在控件输入字符串后按回车来赋值。

  • 属性编辑器支持

修改OEA中的属性编辑器LookupListPropertyEditor,监听按回车事件来赋值

 

void _cmbGrid_PreviewKeyDown(object sender, System.Windows.Input.KeyEventArgs e)        {            //根据输入的Text来设置属性值            if (e.Key == Key.Enter)            {                this.LoadData(false);                if (!_cmbGrid.IsShowingTree)                {                    foreach (var item in _cmbGrid.ItemsSource)                    {                        if (item.GetPropertyValue
("Name") == _cmbGrid.Text) { _cmbGrid.SelectedItem = item; SetValueBySelectedItem(); break; } } } else { string[] nodes = _cmbGrid.Text.Split('/'); Guid? pid = null; ITreeNode curNode = null; foreach (var node in nodes) { curNode = FindByName(node, pid); if (curNode == null) return; pid = (Guid)curNode.Id; } _cmbGrid.SelectedItem = curNode; SetValueBySelectedItem(); } } }

 

  • 脚本更改
    属性编辑器("项目信息", :下拉列表).输入("江南四期1、4区项目")属性编辑器("合同科目", :下拉树形列表).输入("建安工程类合同/建安工程和总包管理配合服务")
  • 自动化测试框架更改

 

class ComboBoxTestObject < TestObject  def 输入(str)    puts "输入:" + str    @test_control.DrawHighlight    edt = WpfEdit.new(@test_control)    edt.Text = str    Keyboard.SendKeys(edt, "{ENTER}")  endend

 

本篇回顾

  1. 对每项任务设定时间框,防止自己在一项事件上花费比预计多几倍的时间
  2. 解决问题的办法仍旧是提出猜测并快速验证,快速验证是解决很多问题的通用办法

 

欢迎转载,转载请注明:转载自 [ ]

你可能感兴趣的文章
19.04.16--指针笔记-参数传递
查看>>
面向对象
查看>>
POJ1860 Currency Exchange
查看>>
关于ST-Link的internal command error问题的解决方法
查看>>
[IDE]VC2012 项目之间依赖关系取消自动Link导致的LNK2019
查看>>
IDEA 修改JSP和后端数据后,页面刷新可以实时更新
查看>>
IT兄弟连 JavaWeb教程 Servlet会话跟踪 Cookie路径问题
查看>>
synchronized(this)(转)
查看>>
类别标签处理
查看>>
深度|余凯:基于深度学习的自动驾驶之路
查看>>
ORA-00845: MEMORY_TARGET not supported on this system
查看>>
数据库存储结构
查看>>
国内银行CNAPS CODE 查询 苹果开发者,应用内购,需要填写税务相关信息必须的...
查看>>
Linux下抓图工具shutter
查看>>
javascript获取select,checkbox,radio的值
查看>>
Metro Win8风格的按钮(Filp翻转)
查看>>
cookies/session/token
查看>>
清除代码异味
查看>>
【转】从知乎上看到“全栈开发者”讨论之后的自黑
查看>>
Java-IO流
查看>>