51Testing软件测试论坛

标题: 关于QTP对Java插件的识别问题(JavaTable下拉框) [打印本页]

作者: higkoo    时间: 2007-4-30 12:46
标题: 关于QTP对Java插件的识别问题(JavaTable下拉框)

如图红圈圈内所示,一个JavaTable下拉控件,可以选择下拉列表的值,也可以手动输入。
1、用QTP直接录制时脚本为:
JavaWindow("测试程序").JavaTable("数据列表").SetCellData 1,4,"平方米"
回放虽然没有出错,但值也未设置成功,SetCellData方法对下拉列表似乎无效。
2、添加辅助脚本:
JavaWindow("测试程序").JavaTable("数据列表").ClickCell 1,4    ‘单击网格,让其呈现为录入状态。
JavaWindow("测试程序").JavaTable("数据列表").SetCellData 1,4,"平方米"  ‘输入录入值。
   第一行虽然回放成功,操作也有效,但根本不起作用,第二行代码不受第一行的影响。
3、修改录入方式
JavaWindow("测试程序").JavaTable("数据列表").SelectRow 2
这样也不行。
好像没有其它好的办法了,SendKey也不支持。图示SPY为捕捉到下拉框里的值的属性。但实际录制生成脚本里到JavaTable已经到底了,求高手指教!

作者: higkoo    时间: 2007-4-30 21:31
标题: 太失望了
连51里都没有一个人知道或愿意回答吗?sdlkfj9
作者: higkoo    时间: 2007-5-1 09:17
标题: 在线等呀
有没人知道啊?给给建议……

   :(
作者: higkoo    时间: 2007-5-2 21:27
标题:
看来大家是真的都放假了。

呵呵,我也放假了……sdlkfj2
作者: RYU    时间: 2007-5-3 17:41
标题: 现在用QTP的高手还不多.....
看来现在用QTP的高手还不多......
sdlkfj9
作者: higkoo    时间: 2007-5-4 20:24
标题: 顶上去
知心者难求也……sdlkfj9
作者: alex_82712    时间: 2007-5-5 15:13
虽然没有好的建议,但是还是冒冒泡,说明我已经放完假了
呵呵
作者: 51mobile    时间: 2007-5-5 21:44
这几天大家在放假,过两天应该有人会回答的,可惜我的水平不够
作者: higkoo    时间: 2007-5-7 20:01
原帖由 alex_82712 于 2007-5-5 15:13 发表
……冒冒泡,说明我已经放完假了……


明天又要上班了,我今天下载了QTP9.2,结果和8.2完全一样,不能解决问题。


  sdlkfj9


  看来只能从代码级或高级设置中找答案了。


     冒泡泡,路过的朋友们  仁者见仁,智者见智啊……  sdlkfj6
作者: hehemeimei    时间: 2007-5-8 09:37
你把“.set”改成“.type”这个方法试一下。
作者: higkoo    时间: 2007-5-8 11:27
标题: 可以运行成功
用TYPE方法,可以运行成功,但值没有输入成功,和SET方法结果一样。

我尝试用他的  FireEvent 来TypeKey,帮助文档写得太简单了。

网上的说明难以理解,没有一个例子可参考的。sdlkfj7
作者: higkoo    时间: 2007-5-8 11:41
我参照了QTP中关于JavaTable的说明:

Recording on Custom Cell Editors in Swing JTable Tables (非标准表格控件)
When a JTable contains a custom (non-standard) cell editor, the default SetCellData statement cannot be recorded. For example, if a cell contains both a check box and a button that opens a dialog box, then a SetCellData statement may not always provide an accurate description of the operation(s) performed inside the cell.

里面也有举例说明,但是是对单选框的。
If you record an operation on a custom cell editor, QuickTest records a statement that reflects the operation you performed on the object inside of the cell. For example, if the cell editor contains a custom check box, QuickTest might record the following statement:

Browser("Periodic").Page("Periodic").JavaWindow("CoolJava").JavaDialog("SetOptions").JavaCheckBox("MyCheckBox").Set "ON"

instead of:

Browser("Periodic").Page("Periodic").JavaWindow("CoolJava").JavaDialog("SetOptions").JavaTable("MyTable").SetCellData "ON"
这个例子中,出错的原因是代码生成错误,然后改成SetCellData,

而我现在是JavaTable的自定义了一个下拉框,可以自动识别为SetCellData,但Set方法无效。

求救啊!此问题一直为解。
作者: walker1020    时间: 2007-5-8 14:24
1,“值也未设置成功,SetCellData方法对下拉列表似乎无效” 到底是什么意思?请说清楚 你要达到的效果和 QTP回放脚本的实际效果或出现的问题,请精确描述,不要用“似乎”。我这里没有你那边的环境,只能根据你的描述来帮你解决问题。
2, “根本不起作用" 是什么意思?
3,”这样也不行“ 到底是什么意思?
作者: higkoo    时间: 2007-5-8 15:10
标题: 回复 #13 walker1020 的帖子
1,“值也未设置成功,SetCellData方法对下拉列表似乎无效” 到底是什么意思

?请说清楚 你要达到的效果和 QTP回放脚本的实际效果或出现的问题,请精确描

述,不要用“似乎”。我这里没有你那边的环境,只能根据你的描述来帮你解决

问题。

        “SetCellData方法对下拉列表似乎无效”是我的主观描述,用

SetCellData时,回放过程下拉列表没有被激活。(录制过程是打开下拉框,选中

列表中的值)
        “值也未设置成功”也是我的主观描述,录制过程选择了下拉列表中的

值,回放过程没有选中任何值;修改脚本,直接用SetCellData赋值给对应单元格

,结果没有赋值成功,对应表格还是空的,没有任何数值。
        我的描述是太含糊了。。。   :(
        其实我的目的很简单,就是要给单元格设置一个指定值。
2, “根本不起作用" 是什么意思?

        这个描述不当,“根本不起作用" 就是回放过程单元格没有发生任何改

变,没有输入数据进去。
3,”这样也不行“ 到底是什么意思?

        ”这样也不行“,描述不够客观。意思其实就是和上面一样,没有回放

成功。(QTP完成测试,但单元格中没有数据)


   我已经让程序员帮忙写一个测试程序,现在他们比较忙,到时传到网上就好了



  测试程序描述:
        程序界面和Excel非常相似,由很多行和列组成,列是固定的,行是可增

删改的。
  测试目的:
        要输入一些数据进去,查看程序的处理结果是否正确。
  目前的问题:
        普通的单元格(直接输入数据)可以录制、回放成功。需要从下拉列表中选择数值的,回放过程值没有输入成功(空白)。
        QTP脚本中没有 打开列表和选择列表值的记录,录制下拉列表生成的脚本和普通单元格是一样的,仅使用了SetCellData 。
作者: yzem99    时间: 2007-5-8 16:06
看到你spy出来的是javalist
可以试试下面这个:
JavaWindow("测试程序").JavaTable("数据列表").ClickCell 1,4
JavaWindow("测试程序").JavaTable("数据列表").JavaList("JComboBox").Select("平方米")

当然首先在你的object repository里要有JavaList("JComboBox")
作者: higkoo    时间: 2007-5-8 16:58
原帖由 yzem99 于 2007-5-8 16:06 发表
看到你spy出来的是javalist
可以试试下面这个:
JavaWindow("测试程序").JavaTable("数据列表").ClickCell 1,4
JavaWindow("测试程序").JavaTable("数据列表").JavaList("JComboBox").Select("平方米")

当 ...


此方法我也试过了,ClickCell后,单元格呈图示状态(等待输入),并没有激活下拉框。
单元格已经是JavaTable的子元素了,好多方法都行不通,我尝试了JavaTable的好多属性和方法,都没有尝试成功,感觉好像是QTP的问题,QTP没有去识别这个动作。

可以用低级录制,但低级录制的可维护性就很差了,有几百行数据,低级录制无法进行参数化。


  如果我会编程就好了,直接写一个测试程序上来,大家就可以直接尝试了,不用老看描述和想像了 sdlkfj8
作者: yzem99    时间: 2007-5-8 17:06
既然识别出来的是javalist,就应该用javalist的方法去处理,因为javalist已经把javatable覆盖住了。一般这个这个时候就可以用javalist("").select "" 去做的。要是不行,你再点击后边的箭头或双击,这应该可以弹出list出来了吧,再select试试看
作者: higkoo    时间: 2007-5-8 17:44
标题: 将整个过程分解如下:
将整个过程分析如图,
在下拉框中选择值可分为以下步骤:
1、激活单元格,出现下拉按钮Button。 //可用ClickCell激活,出现下接按钮
2、单击下拉按钮,出现列表与下拉框。 //可用Button.Click打开列表
3、将鼠标移至下拉列表中,让下拉列表得到焦点。 //目前未能实现,JavaList.Activate方法没反应
4、单击下拉列表中的值,完成选择。 //用JavaList的方法都没有反应

方法二:
不在列表中选择,直接输入自定义的值。
1、激活单元格,呈现可编辑状态。  //直接ClickCell即可实现。
2、输入自定义的值。   //用Type、SetCellData都没有反应。

作者: higkoo    时间: 2007-5-8 17:47
标题: 此方法也尝试过了
原帖由 yzem99 于 2007-5-8 17:06 发表
既然识别出来的是javalist,就应该用javalist的方法去处理,因为javalist已经把javatable覆盖住了。一般这个这个时候就可以用javalist("").select "" 去做的。要是不行,你再点击后边的箭头或双击,这应该可以弹 ...



  谢谢Yzem99!
  这个方法理论上是可行了,我也尝试过了,可能问题的根本不在这里吧。
  现在用JavaList的方法根本就没有任何反应(Action 、GetItem、Select…… ),苦闷!sdlkfj7
作者: yzem99    时间: 2007-5-8 19:17
不知道你有没有试过javalist.Object.*  里面的方法,这个里面是没有被封装的函数。
如果你要是能知道这个控件定义在哪个jar包的话,可以去研究一下Java Add-in Extensibility。详细内容可以看Java Add-in Extensibility Developer's Guide。
作者: yzem99    时间: 2007-5-8 19:26
或者是javaEdit("").Object.SetText("")
作者: higkoo    时间: 2007-5-8 21:49
原帖由 yzem99 于 2007-5-8 19:26 发表
或者是javaEdit("").Object.SetText("")



    Object 这个属性我还没真试过,不过刚看JavaTable("表格控件").Object下没有SetText这个方法。

  Object下有好多属性和方法,查帮助文档写得很简单,没有例子和太多说明。

  宿舍机器跑QTP超慢,明天回公司再试试……  sdlkfj6
作者: higkoo    时间: 2007-5-9 09:34
标题: 问题解决啦……
一个问题不解决,会让我N天睡不香,昨晚突然来灵感,今天早上过来尝试,发现问题已解决!

直接录制:
JavaWindow("程序窗体").JavaTable("风格窗体").SetCellData ""
低级录制:
   Window("程序窗体").Click X,Y
   Window("程序窗体").Type ""

两者结合即可解决问题:
JavaWindow("程序窗体").JavaTable("风格窗体").ClickCell Row,Col
Window("程序窗体").Type ""

这样问题就解决了,而且可以进行参数化呢,哈哈…… sdlkfj3


当然前提条件是对象库中已含有上述所有的对象了喔。sdlkfj2


[ 本帖最后由 walker1020 于 2007-5-13 09:04 编辑 ]
作者: hehemeimei    时间: 2007-5-9 10:21
我参照了QTP中关于JavaTable的说明:
  我怎么在QTP的帮助文档中找到相关的主题啊,希望楼主给与解释
作者: higkoo    时间: 2007-5-9 11:59
原帖由 hehemeimei 于 2007-5-9 10:21 发表
我参照了QTP中关于JavaTable的说明:
  我怎么在QTP的帮助文档中找到相关的主题啊,希望楼主给与解释



    首先你必须安装了QTP的Java插件才会有对应的帮助文档,
    打开帮助文档,在索引中输入JavaTable即出现相关内容。sdlkfj2
作者: hehemeimei    时间: 2007-5-9 15:31
原来是没有装JAVA的插件,多谢了。
作者: three116    时间: 2007-10-17 09:47
没有QTP9.2的java插件license,不能用好可惜哦
作者: xiaofang202    时间: 2009-4-20 11:14
受教了
作者: jfzuo0303    时间: 2009-6-11 13:57
遇到了同样的问题,学习了,去试试!
作者: alinahello    时间: 2010-3-19 12:23
能不能给我传个java插件啊 真的谢谢了
作者: zhengpeipei    时间: 2010-3-19 13:20
路过
作者: ppguo    时间: 2010-12-27 13:46
没有java的插件啊。。。。。我现在就碰到java的控件不能识别的情况。。。。
作者: 陶然楠轩    时间: 2015-8-31 13:15
解决了我的问题




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