51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 2535|回复: 7
打印 上一主题 下一主题

[原创] QTP自动化用例中的实际结果和上一条用例结果一样,如何解决

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2012-11-29 11:02:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用QTP录制了一个注册流程,有邮箱、昵称、密码和确认密码,分别参数化后写入测试用例,用例中有错误的邮箱(如已被注册或者格式不对),在执行其下一条用例时也报同样的错误,就算是注册成功了,也有报这样的错误,请高手指点迷津啊?
脚本代码:
Dim email, email2,urlname,urlname2,pwd,pwd2,dpwd,dpwd2
Dim i
email = datatable("邮箱预期结果",dtLocalSheet)
email2 = datatable("邮箱实际结果",dtLocalSheet)
urlname = datatable("昵称预期结果",dtLocalSheet)
urlname2 = datatable("昵称实际结果",dtLocalSheet)
pwd = datatable("密码预期结果",dtLocalSheet)
pwd2 = datatable("密码实际结果",dtLocalSheet)
dpwd = datatable("确认密码预期结果",dtLocalSheet)
dpwd2 = datatable("确认密码实际结果",dtLocalSheet)
Browser("互动汽车_3互动汽车").Page("互动汽车_3互动汽车").Link("注册").Click
For i = 1 to datatable.GetSheet("Action1").GetRowCount
Browser("互动汽车_3互动汽车").Page("互动汽车-DRIVE FOR LIFE,爱汽车、爱生活、爱网").WebEdit("email").Set DataTable("登录邮箱", dtLocalSheet)
Browser("互动汽车_3互动汽车").Page("互动汽车-DRIVE FOR LIFE,爱汽车、爱生活、爱网").Output CheckPoint("互动汽车-DRIVE FOR LIFE,爱汽车、爱生活、爱网_2")
If email <> email2 Then
Reporter.ReportEvent 1,"错误信息","邮箱预期结果:"+ email +",邮箱实际结果:"+ email2
End If
Browser("互动汽车_3互动汽车").Page("互动汽车-DRIVE FOR LIFE,爱汽车、爱生活、爱网").WebEdit("nickname").Set DataTable("站内昵称", dtLocalSheet)
Browser("互动汽车_3互动汽车").Page("互动汽车-DRIVE FOR LIFE,爱汽车、爱生活、爱网").Output CheckPoint("互动汽车-DRIVE FOR LIFE,爱汽车、爱生活、爱网_3")
If urlname <> urlname2 Then
Reporter.ReportEvent 1,"错误信息","昵称预期结果:"+ urlname +",昵称实际结果:"+ urlname2
End If
Browser("互动汽车_3互动汽车").Page("互动汽车-DRIVE FOR LIFE,爱汽车、爱生活、爱网").WebEdit("password").SetSecure DataTable("登录密码", dtLocalSheet)
Browser("互动汽车_3互动汽车").Page("互动汽车-DRIVE FOR LIFE,爱汽车、爱生活、爱网").Output CheckPoint("互动汽车-DRIVE FOR LIFE,爱汽车、爱生活、爱网_4")
If pwd <> pwd2 Then
Reporter.ReportEvent 1,"错误信息","密码预期结果:"+ pwd +",密码实际结果:"+ pwd
Reporter.ReportEvent 1,"错误信息","确认密码预期结果:"+ dpwd +",确认密码实际结果:"+ dpwd2
End If
Browser("互动汽车_3互动汽车").Page("互动汽车-DRIVE FOR LIFE,爱汽车、爱生活、爱网").WebEdit("repassword").SetSecure DataTable("确认密码", dtLocalSheet)
Browser("互动汽车_3互动汽车").Page("互动汽车-DRIVE FOR LIFE,爱汽车、爱生活、爱网").Output CheckPoint("互动汽车-DRIVE FOR LIFE,爱汽车、爱生活、爱网_5")
If dpwd <> dpwd2 Then
Reporter.ReportEvent 1,"错误信息","确认密码预期结果:"+ dpwd +",确认密码实际结果:"+ dpwd2
End If
datatable.GetSheet("Action1").SetNextRow
Next
Browser("互动汽车_3互动汽车").Page("互动汽车-DRIVE FOR LIFE,爱汽车、爱生活、爱网").WebButton("WebButton").Click

数据表测试用例


回放完后在测试结果的当前参数表中邮箱实际结果列的内容从上到下是:
邮箱实际结果

邮箱已被占用
邮箱已被占用
邮箱已被占用
邮箱已被占用
邮箱已被占用
邮箱不能为空
邮箱不能为空

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2012-11-29 13:12:26 | 只看该作者
第一,你用SetNextRow是有什么特殊原因吗?为何不在action1上右键“call action property”选择循环全部行?
第二,CheckPoint("互动汽车-DRIVE FOR LIFE,爱汽车、爱生活、爱网_2")里怎么设置的?
第三,建议,字段名称不用中文,qtp对中文的支持有时有异常;
第四,如果真的是CheckPoint("互动汽车-DRIVE FOR LIFE,爱汽车、爱生活、爱网_2")在output时如果为空则仍然指向之前一个循环中的checkpoint,那只能不用checkpoint了,可以用getROProperty来获取给datatable。
回复 支持 反对

使用道具 举报

该用户从未签到

3#
发表于 2012-11-29 18:10:04 | 只看该作者
回复 2# 泰然

如果用“call action property”的话难道要每个循环就重新开一下浏览器么?我觉得这样(SetNextRow)写循环是非常好的
回复 支持 反对

使用道具 举报

该用户从未签到

4#
发表于 2012-11-29 19:00:46 | 只看该作者
首先,output不会自动增加datatable的行数,即使你用了setNextRow也不行,你debug的时候可以看到,这个输出值一直都是在第一行,没有修改的。
其次,output如果为空的话,并不会覆盖原来的值,比如第一次的output值为“邮箱已被占用”,但是下面四个output的值都是空,但是,读取出来还是“邮箱已被占用”。

目测你其他的字段都有这个问题

推荐做法:
1. 在每次output之前,将当前的值赋为空值 (DataTable.LocalSheet.GetParameter("邮箱实际结果").Value = "")
2. 使用正则匹配,将显示错误信息的元素添加到对象库,然后用getRoPorperty来获取当前值
回复 支持 反对

使用道具 举报

该用户从未签到

5#
 楼主| 发表于 2012-11-29 20:26:07 | 只看该作者
回复 2# 泰然


    你好,首先谢谢你的耐心解答,对于你提出的两个疑问:
1. 第一个楼下的已经解答,我只是在填写注册表单时循环运行,不需要每次都去点击“注册”按钮;
2. 第二个问题:我之前是插入的文本输出值,所以只有Page而没有WebElement,这一步是我的操作错误。
我也已经试了你说的getROProperty这个方法,确实解决了我的问题,但是又出现了新的问题,见以下截图:

对象描述不匹配的问题
脚本: Browser("互动汽车_3互动汽车").Page("互动汽车-DRIVE FOR LIFE,爱汽车、爱生活、爱网").WebElement("Email格式错误,请重新输入").GetROProperty("innertext")
GetROProperty中的属性名称好像只能使用“innertext“,换了其他的,回放后返回的实际值都不正确。
还劳烦继续帮忙,谢谢!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

x
回复 支持 反对

使用道具 举报

该用户从未签到

6#
 楼主| 发表于 2012-11-29 21:13:46 | 只看该作者
回复 2# 泰然

你好,首先非常感觉你的详细解答。对于你两个问题作以下解释:
1. 第一个问题,楼下“风雪夜归人”已经回答,我只是循环的去填写表单,不需要每次都点击按钮;
2. 我之前设置的是插入文本输出值,所以没有WebElement,现在已经改成了插入输出值的效果了。
在这个WebElement后面我按照你的指点使用了getROProperty,代码如下:
DataTable("email_actualResult",dtLocalSheet) = Browser("互动汽车_3互动汽车").Page("互动汽车-DRIVE FOR LIFE,爱汽车、爱生活、爱网").WebElement("Email格式错误,请重新输入").GetROProperty("innertext")
但是此时又出现了另一个问题,就是每当执行到这里的时候,都会有警告,如图:

在对象标识中使用了辅助属性和智能标识,没能解决;innertext的属性值在回放时应该是变化的,所以我将其属性值参数化并选择了随机数(其余默认),还是没能解决这个警告的问题。
还能继续帮忙,谢谢!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

x
回复 支持 反对

使用道具 举报

该用户从未签到

7#
 楼主| 发表于 2012-11-30 11:16:38 | 只看该作者
回复 4# 风雪夜归人


我可以不可以这样理解:output不能用在失去焦点即可报错的web页面,而只有在点击“提交”之类的按钮后才会报错的脚本中才可以使用output。
回复 支持 反对

使用道具 举报

该用户从未签到

8#
发表于 2013-12-19 10:15:44 | 只看该作者
你好,请问你这个问题解决了吗?我现在也碰到了同样的问题,还没有找到解决的方法。如果你找到了方法,还请帮帮忙,多谢多谢!
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-4-28 01:40 , Processed in 0.073082 second(s), 28 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表