51Testing软件测试论坛

标题: 【已解决】cs应用,窗口识别的问题 [打印本页]

作者: wangll    时间: 2013-4-24 17:51
标题: 【已解决】cs应用,窗口识别的问题
本帖最后由 wangll 于 2013-4-25 11:37 编辑

cs应用,窗口识别的问题:打开窗口A,对应text="测试应用",选择一个项目后,在A窗口会显示所选项目的所有信息,而A窗口的text="测试应用-项目名称XXX",我现在要判断打开项目是否成功,但窗口A对象总是识别不到,用了描述性编程+正则表达式如If WpfWindow("text:=测试应用-.").exist为何不行呢?
作者: wangll    时间: 2013-4-24 22:28
[attach]84890[/attach]自己模拟了一个简单的应用,点击button后,form的text值随机变化,我只是想在点button后只要知道form的text值变化了就证明button操作成功,如何实现呢?
作者: 黑羽祭    时间: 2013-4-25 09:19
本帖最后由 黑羽祭 于 2013-4-25 09:29 编辑

回复 2# wangll


    这样:
  1. Dim oBefore,oAfter
  2. oBefore = Window("text:=点击前.*").GetROProperty("text")

  3. Window("text:=点击前.*").WinObject("text:=button1").Click
  4. oAfter =  Window("text:=点击前.*").GetROProperty("text")
  5. If oBefore <> oAfter Then
  6.     msgbox "操作成功"
  7. Else
  8.     msgbox "未操作成功"
  9. End If
复制代码

作者: 黑羽祭    时间: 2013-4-25 09:19
回复 2# wangll


    你正则应该写:Window("text:=测试应用-.*")
作者: tshabc    时间: 2013-4-25 09:28
子曰,学而时习之
作者: wangll    时间: 2013-4-25 09:54
回复 4# 黑羽祭
自己模拟的那个小例子这种方式是识别的,我。。。而本身测试的应用还是不行
作者: 黑羽祭    时间: 2013-4-25 10:00
回复 6# wangll


    .后面加*还是不行?有没有报错?上截图看,最好再发一下脚本
信息多了才能定位问题
作者: wangll    时间: 2013-4-25 10:33
加*还是不行:
   If WpfWindow("打开项目").Exist(3) Then
           Randomize
                '获取列表的总行数
                rows = WpfWindow("打开项目").WpfTable("WpfTable").RowCount
                seIRow = Cint(int(rows* Rnd))'Int((upperbound - lowerbound + 1) * Rnd + lowerbound)

                '该行对应的项目名称
                projectName = WpfWindow("打开项目").WpfTable("WpfTable").GetCellData(seIRow,0)       

                WpfWindow("打开项目").WpfTable("WpfTable").SelectRow seIRow
                WpfWindow("打开项目").WpfButton("确定").Click

                wait 3
                oAfter = WpfWindow("text:=测试数据自动判读 -.*").GetROProperty("text")
                msgbox oAfter

                If WpfWindow("text:=测试数据自动判读 -.*").Exist Then
                        parameter("resultValue_script")="Yes"
                else
                        parameter("resultValue_script")="NO"
                End If
   End If
作者: wangll    时间: 2013-4-25 10:36
If WpfWindow("text:=测试数据自动判读 -.*").Exist Then 这一句是直接跳到else语句了
所以又按照你的示例用了oAfter = WpfWindow("text:=测试数据自动判读 -.*").GetROProperty("text"),看看是否能获取到text值,可这时候报[attach]84926[/attach]可怎么会匹配了多个对象呢?
作者: 黑羽祭    时间: 2013-4-25 10:43
回复 9# wangll


    说明能找到多个这样的框,所以对WpfWindow("text:=测试数据自动判读 -.*")的描述要再增加一些属性。
作者: wangll    时间: 2013-4-25 10:45
回复 7# 黑羽祭


1、 或者我把之前的对象库全都删除,全都改为描述性编程试试?
2、还有个问题,打开项目前的窗体A,包含了很多控件,如button,
winfrom("测试应用").winbutton("打开项目").click
打开项目后的窗体A只是文本变了,而button还在,又加了一些其他的控件,那么在识别这些button的时候,再写成这样winfrom("测试应用").winbutton("打开项目").click 肯定是识别不了了,因为winform的text变化了,那又该怎么解决这个问题呢?
作者: 黑羽祭    时间: 2013-4-25 10:51
回复 11# wangll


    1. 为什么要吧对象库全删了?那样效率多低,结合使用不是更好嘛。
    2. 可以用对象库啊,记录2个按钮就行了,描述性编程也行,描述其他属性就行了,别用text属性也能用同一个条件点上,不过不怎么推荐。

合理的使用对象库,这些问题都能解决,对象库也支持正则的,没必要都改成描述性编程
作者: wangll    时间: 2013-4-25 10:55
回复 12# 黑羽祭


好的,我再看一下为何匹配了多个对象啊
作者: 黑羽祭    时间: 2013-4-25 11:02
回复 13# wangll


    你可以加个index属性上去,0-n逐个highlight,就能很快知道为什么了。
作者: wangll    时间: 2013-4-25 11:02
回复 12# 黑羽祭

1、太帅了,按你说的加了个devname属性,可以识别了,但其实还是有些不明白的,就是我觉得就这一个窗口啊怎么会匹配了多个呢,不过终究解决了问题,呵呵
2、打开项目后的窗口识别使用了描述性编程,那么后边的所有基于这个窗口的操作是不是都要描述性编程了呢?
作者: 黑羽祭    时间: 2013-4-25 11:23
回复 15# wangll


    1. 很正常,再说你用了正则,出现了2个一样的控件很可能。你可以添加控件到对象库,然后看看对象库是怎么对这个控件进行描述的,照着学学。
    2. 对的,那层以下都强制使用描述性编程。




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2