51Testing软件测试论坛

标题: 【已解决】qtp11 独立的action之间相互调用时,datatable的用法 [打印本页]

作者: robinpipi    时间: 2012-12-6 15:52
标题: 【已解决】qtp11 独立的action之间相互调用时,datatable的用法
本帖最后由 黑羽祭 于 2012-12-12 17:28 编辑

新建test1: Browser("百度一下,你就知道").Page("百度一下,你就知道").WebEdit("wd").Set DataTable.Value("A","Action1")[attach]82657[/attach]
新建test2:调用test1:RunAction "Action1 [Test3]", oneIteration
[attach]82660[/attach]

运行test2,报错:
[attach]82659[/attach]

请问不同action之间调用的时候,datatable应如何处理呢
作者: robinpipi    时间: 2012-12-6 16:09
这个问题一直没解决,请各位费心
作者: jack_loo    时间: 2012-12-6 17:56
你是采用调用副本的方式调用的吧?
把脚本Browser("百度一下,你就知道").Page("百度一下,你就知道").WebEdit("wd").Set DataTable.Value("A","Action1")中的“Action1”改成“Action1 [Test3]”

原因是action1调用的action名字叫“Action1 [Test3]”,所以DataTable中要改名。
作者: robinpipi    时间: 2012-12-7 10:01
我不是才用的副本的方式,采用的是 调用现有操作的方式
作者: robinpipi    时间: 2012-12-7 13:46
没人回答啊
作者: robinpipi    时间: 2012-12-7 16:48
自己顶一下
作者: jack_loo    时间: 2012-12-7 21:01
你说调用test1,但脚本却是调用test3,脚本写的是RunAction "Action1 [Test3]", oneIteration。

无论是副本调用还是现有脚本调用,我说的原因都是正确的,你可以在test1的脚本中增加以下内容,然后在test2中运行:
print DataTable.LocalSheet.Name
你就能看到在test2中运行时的第三个sheet的名称是:Action1 [Test3]
作者: robinpipi    时间: 2012-12-11 10:04
本帖最后由 robinpipi 于 2012-12-11 10:07 编辑

我描述的名称有问题,就是test5调用test3。目前test5调用test3就会报A列不存在
作者: robinpipi    时间: 2012-12-11 10:11
用print 打出来是 Action1【Test3】,而在test3中把Browser("百度一下,你就知道").Page("百度一下,你就知道").WebEdit("wd").Set DataTable.Value("A","Action1")中的“Action1”改成“Action1 [Test3]”后,在test5中运行,会报Action1【Test3】工作表不存在。
作者: 泰然    时间: 2012-12-11 12:03
你到底有几个test啊?到底是不是现有调用?如果是现有调用的化,应该只有test1和test2,怎么会出来什么test3和test5呢?
作者: robinpipi    时间: 2012-12-11 13:44
就是2个test,无论是1和2,还是3和5,只不过是命名不同。因为楼上的提出了我是因为调用了test3,所以做了一下解释。
作者: robinpipi    时间: 2012-12-12 11:06
求解决啊,求解决啊
作者: 黑羽祭    时间: 2012-12-12 11:27
回复 12# robinpipi


    还没有查出原因么?
作者: robinpipi    时间: 2012-12-12 11:40
没有,这个肯定不是脚本错误造成的,就是简单的一句,然后就直接调用。
作者: robinpipi    时间: 2012-12-12 11:40
问过几个人,都没彻底解决
作者: 黑羽祭    时间: 2012-12-12 11:56
回复 15# robinpipi


    好吧,我帮你看看。等等
作者: 黑羽祭    时间: 2012-12-12 12:52
回复 1# robinpipi


    你在Test1中的Action1写了DataTable.Value("A","Action1"),这样运行是可以的。
当你用Test2来调用Action1的时候,你注意DataTable,Test1的Action1表的名字变为了Action1 [Test3],表的sheet名都变了,自然就找不到你要的内容。
如果你在Test2中使用DataTable.Value("A","Action1 [Test3]"),我相信是可以使用的。

你想多Action调用,并读表格,如果是我的话,就调用外部的Excel,不使用DataTable。
作者: robinpipi    时间: 2012-12-12 14:52
回复 17# 黑羽祭


    不行。[attach]82723[/attach]这是修改后运行报的错误
作者: robinpipi    时间: 2012-12-12 14:53
回复 17# 黑羽祭
不行的。
[attach]82724[/attach]这是修改后运行的错误。

作者: 黑羽祭    时间: 2012-12-12 16:07
回复 19# robinpipi


    Action1和[Test3]之间少个空格
作者: robinpipi    时间: 2012-12-12 16:46
回复 20# 黑羽祭


    哦,真是空格的原因。看来这么写太不方便了。
改了之后,被调用的actiion自己就不能运行了,
如果不改,调用的action会报错。
还是用excel比较方便,datatable还是有很多限制。
我再请教一下:这种独立的action调用方法好吗?我们在做项目的时候,会这样子做吗?
比如有多个人在做项目,或者说分模块做,一般情况下都会是单独的action,然后在统一的main中调用。
我现在就是写了多个模块的功能,现在在一个acttion里面调用,这样子,执行main就可以把所有的模考执行。
作者: 黑羽祭    时间: 2012-12-12 16:58
回复 21# robinpipi


    每个人的做法不同吧,根据你们项目组的情况,找到更符合你们那情况的方案。
我的话,我并没有将每个模块写入每个Action这样。因为我不是已模块进行脚本分划分,我的脚本是以各种类型表单为主,所以我是根据表单进行划分的脚本,一个脚本只有一个Action,这个Action包括了这个表单的所有操作,通过一张外部Excel进行设置与控制,那些常用的函数是写在外部vbs文件,通过Function Library进行加载并使用。对应模块的对象库导出,如要使用该模块,则加载这个模块的对象库。然后就是直接使用了。说的可能有点乱,不过在我的项目中用的很方便,几个外部vbs文件写的比较大,而每个脚本Action中的内容反而比较少。都交给这些vbs文件自己完成了。
作者: robinpipi    时间: 2012-12-12 17:15
回复 22# 黑羽祭


    好的。谢谢黑羽。
我是一个新手,目前还不太会写外部可以重复使用的vbs之类的,基本都是按步骤一句一句的完成,接下来使用熟练了,就该考虑抽出可重用的函数之类的,现在自己看自己写的脚本都有点惨不忍睹的感觉,呵呵。
作者: 黑羽祭    时间: 2012-12-12 17:28
回复 23# robinpipi


    呵呵  慢慢来吧~




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