wangll 发表于 2013-4-24 17:51:58

【已解决】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:21

自己模拟了一个简单的应用,点击button后,form的text值随机变化,我只是想在点button后只要知道form的text值变化了就证明button操作成功,如何实现呢?

黑羽祭 发表于 2013-4-25 09:19:05

本帖最后由 黑羽祭 于 2013-4-25 09:29 编辑

回复 2# wangll


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

Window("text:=点击前.*").WinObject("text:=button1").Click
oAfter =Window("text:=点击前.*").GetROProperty("text")
If oBefore <> oAfter Then
    msgbox "操作成功"
Else
    msgbox "未操作成功"
End If

黑羽祭 发表于 2013-4-25 09:19:55

回复 2# wangll


    你正则应该写:Window("text:=测试应用-.*")

tshabc 发表于 2013-4-25 09:28:30

子曰,学而时习之

wangll 发表于 2013-4-25 09:54:34

回复 4# 黑羽祭
自己模拟的那个小例子这种方式是识别的,我。。。而本身测试的应用还是不行:L

黑羽祭 发表于 2013-4-25 10:00:44

回复 6# wangll


    .后面加*还是不行?有没有报错?上截图看,最好再发一下脚本
信息多了才能定位问题

wangll 发表于 2013-4-25 10:33:41

加*还是不行:
   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:05

If WpfWindow("text:=测试数据自动判读 -.*").Exist Then 这一句是直接跳到else语句了
所以又按照你的示例用了oAfter = WpfWindow("text:=测试数据自动判读 -.*").GetROProperty("text"),看看是否能获取到text值,可这时候报可怎么会匹配了多个对象呢?

黑羽祭 发表于 2013-4-25 10:43:39

回复 9# wangll


    说明能找到多个这样的框,所以对WpfWindow("text:=测试数据自动判读 -.*")的描述要再增加一些属性。

wangll 发表于 2013-4-25 10:45:49

回复 7# 黑羽祭


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

黑羽祭 发表于 2013-4-25 10:51:42

回复 11# wangll


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

合理的使用对象库,这些问题都能解决,对象库也支持正则的,没必要都改成描述性编程

wangll 发表于 2013-4-25 10:55:32

回复 12# 黑羽祭


好的,我再看一下为何匹配了多个对象啊

黑羽祭 发表于 2013-4-25 11:02:55

回复 13# wangll


    你可以加个index属性上去,0-n逐个highlight,就能很快知道为什么了。

wangll 发表于 2013-4-25 11:02:57

回复 12# 黑羽祭

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

黑羽祭 发表于 2013-4-25 11:23:45

回复 15# wangll


    1. 很正常,再说你用了正则,出现了2个一样的控件很可能。你可以添加控件到对象库,然后看看对象库是怎么对这个控件进行描述的,照着学学。
    2. 对的,那层以下都强制使用描述性编程。
页: [1]
查看完整版本: 【已解决】cs应用,窗口识别的问题