walker1020 发表于 2007-4-4 12:31:23

QTP Tutorial 中的订票操作参数化后无法运行第二行的解决方法

Description:
根据 QTP_Tutorial 里面的步骤介绍,先录制预定从 New York 到 San Francisco 航班的机票的操作,然后增加检查点 Checkpoint,最后对fromPort 进行参数化。最后的脚本如下:

Browser("Welcome: Mercury Tours").Page("Welcome: Mercury Tours").WebEdit("userName").Set "mercury"
Browser("Welcome: Mercury Tours").Page("Welcome: Mercury Tours").WebEdit("password").Set "mercury"
Rem 为了说明问题,上面一行是我对原来录制的脚本修改后的结果。如果是录制的脚本,上面一行应为
Rem Browser("Welcome: Mercury Tours").Page("Welcome: Mercury Tours").WebEdit("password").SetSecure "... "
Browser("Welcome: Mercury Tours").Page("Welcome: Mercury Tours").Image("Sign-In").Click 21,2
Wait(5)
Browser("Welcome: Mercury Tours").Page("Find a Flight: Mercury").WebList("fromPort").Select DataTable("depatture", dtGlobalSheet)
Browser("Welcome: Mercury Tours").Page("Find a Flight: Mercury").WebList("fromMonth").Select "December"
Browser("Welcome: Mercury Tours").Page("Find a Flight: Mercury").WebList("fromDay").Select "29"
Browser("Welcome: Mercury Tours").Page("Find a Flight: Mercury").WebList("toPort").Select "San Francisco"
Browser("Welcome: Mercury Tours").Page("Find a Flight: Mercury").WebList("toMonth").Select "December"
Browser("Welcome: Mercury Tours").Page("Find a Flight: Mercury").WebList("toDay").Select "31"
Browser("Welcome: Mercury Tours").Page("Find a Flight: Mercury").WebRadioGroup("servClass").Select "Business"
Browser("Welcome: Mercury Tours").Page("Find a Flight: Mercury").Image("findFlights").Click 65,7
Browser("Welcome: Mercury Tours").Page("Select a Flight: Mercury").Image("reserveFlights").Click 77,10
Browser("Welcome: Mercury Tours").Page("Book a Flight: Mercury").WebTable("New York to San Francisco").Check CheckPoint("New York to San Francisco")
Browser("Welcome: Mercury Tours").Page("Book a Flight: Mercury").Check CheckPoint("Book a Flight: Mercury")
Browser("Welcome: Mercury Tours").Page("Book a Flight: Mercury").WebEdit("passFirst0").Set "Demie"
Browser("Welcome: Mercury Tours").Page("Book a Flight: Mercury").WebEdit("passFirst0").Check CheckPoint("passFirst0")
Browser("Welcome: Mercury Tours").Page("Book a Flight: Mercury").WebEdit("passLast0").Set "Sun"
Browser("Welcome: Mercury Tours").Page("Book a Flight: Mercury").WebEdit("creditnumber").Set "8888888888888888"
Browser("Welcome: Mercury Tours").Page("Book a Flight: Mercury").Image("buyFlights").Click 35,3
Browser("Welcome: Mercury Tours").Page("Flight Confirmation: Mercury").Check CheckPoint("New York")
Browser("Welcome: Mercury Tours").Page("Flight Confirmation: Mercury").Image("home").Click
Browser("Welcome: Mercury Tours").Page("Welcome: Mercury Tours_2").Sync

[ 本帖最后由 walker1020 于 2007-11-22 23:28 编辑 ]

walker1020 发表于 2007-4-12 17:34:23

原帖由 风之无痕 于 2007-4-12 09:35 发表 http://bbs.51testing.com/images/common/back.gif
谢谢你的回答,我想知道要学好这个工具都需要什么编程基础或者别的什么计算机知识的基础?

如果只是为了学习 QTP,那么只需要学习 VBScript 就可以了。当然,我们不是为了学习工具而学习它。为了测试工作的需要,你还需要
了解甚至熟悉测试系统的语言,例如我现在测试的是 J2EE架构的流程管理软件,那么我要知道 J2EE 方面的相关知识,还要知道企业流程方面的有关知识。学无止境。测试也一样。

[ 本帖最后由 walker1020 于 2007-4-12 17:40 编辑 ]

walker1020 发表于 2007-4-4 12:40:09

回放时,QTP正常运行完DataTable的第一行,但当第二次运行时,报告错误:

Cannot identify the object "fromPort" (of class WebList). Verify that this object's properties match an object currently displayed in your application.
Line (6): "Browser("Welcome: Mercury Tours").Page("Find a Flight: Mercury").WebList("fromPort").Select DataTable("depatture", dtGlobalSheet)".

[ 本帖最后由 walker1020 于 2007-11-22 23:29 编辑 ]

walker1020 发表于 2007-4-4 12:45:06

寻找错误

设置断点后,发现是运行完第二行代码后,登陆不成功,自然就找不到这个对象了。仔细检查后发现:在运行第二行的参数时,登陆的时候,userName填完以后,填写password后,userName又变成空的。当然登陆就失败了。

walker1020 发表于 2007-4-4 12:50:51

Solution:
删除最后一行,问题就解决了。

Analysis:
问题出在最后一行的Browser("Welcome: Mercury Tours").Page("Welcome: Mercury Tours_2") 页面与初始页面 Browser("Welcome: Mercury Tours").Page("Welcome: Mercury Tours") 不是一个页面,登陆自然不会成功。

walker1020 发表于 2007-4-4 12:53:55

说明

这是我在帮助一位朋友解决此问题后写的详细结果过程。可能需要初学者都遇到过这个问题,愿我的解答能释去你们的疑惑。为了帮助更多的朋友,把正确的代码共享出来。具体代码请看附件。下载此代码不需要任何积分!
为了便于理解,我已经增加了不少注释。

[ 本帖最后由 walker1020 于 2007-4-4 13:13 编辑 ]

songfun 发表于 2007-4-4 13:35:11

呵呵,walker兄弟热心,支持你

yuanxinyi16rain 发表于 2007-4-4 13:51:04

回复 #5 walker1020 的帖子

good

Coffey111111 发表于 2007-4-4 22:32:22

谢谢,我遇到过这个问题

limxi520 发表于 2007-4-10 10:22:15

QTP参数化问题

在最后一节的运行和分析多操作时,“FlightOrder”操作将运行两次,但在第二次循环时就不能识别对象了,请问是怎么回事?应该如何修改?

walker1020 发表于 2007-4-10 21:07:43

请 limxi520 参考一下我在 #5的附件里面的脚本,看看两者有什么区别。如果问题还有得到解决,那么 就把第二次循环时就不能识别对象的那部分代码放上来吧。这样可以帮你。没有脚本根本没有办法帮你!

limxi520 发表于 2007-4-11 09:03:11

To walker:
请问每次停止录制都会出现Sync事件是什么意思?这是进Find a Flight页面循环两次的脚本,第二次循环就不能识别对象了,请帮忙看一下应该如何修改?
Browser("Welcome: Mercury Tours").Page("Find a Flight: Mercury").WebList("fromPort").Select "London"
Browser("Welcome: Mercury Tours").Page("Find a Flight: Mercury").WebList("fromMonth").Select DataTable("p_fromMonth", dtLocalSheet)
Browser("Welcome: Mercury Tours").Page("Find a Flight: Mercury").WebList("fromDay").Select "29"
Browser("Welcome: Mercury Tours").Page("Find a Flight: Mercury").WebList("toPort").Select DataTable("ArrivalCity", dtLocalSheet)
Browser("Welcome: Mercury Tours").Page("Find a Flight: Mercury").WebList("toMonth").Select DataTable("p_toMonth", dtLocalSheet)
Browser("Welcome: Mercury Tours").Page("Find a Flight: Mercury").WebList("toDay").Select "31"
Browser("Welcome: Mercury Tours").Page("Find a Flight: Mercury").Image("findFlights").Click 51,9
Browser("Welcome: Mercury Tours").Page("Select a Flight: Mercury").Image("reserveFlights").Click 77,6
Browser("Welcome: Mercury Tours").Page("Book a Flight: Mercury").WebEdit("passFirst0").Set "zhang"
Browser("Welcome: Mercury Tours").Page("Book a Flight: Mercury").WebEdit("passLast0").Set "ming"
Browser("Welcome: Mercury Tours").Page("Book a Flight: Mercury").WebEdit("creditnumber").Set "123456"
Browser("Welcome: Mercury Tours").Page("Book a Flight: Mercury").Image("buyFlights").Click 90,14
Browser("Welcome: Mercury Tours").Page("Flight Confirmation: Mercury").Image("backtoflights").Click
Browser("Welcome: Mercury Tours").Page("Find a Flight: Mercury").Sync

walker1020 发表于 2007-4-11 14:00:33

原帖由 limxi520 于 2007-4-11 09:03 发表 http://bbs.51testing.com/images/common/back.gif
To walker:
请问每次停止录制都会出现Sync事件是什么意思?这是进Find a Flight页面循环两次的脚本,第二次循环就不能识别对象了,请帮忙看一下应该如何修改?
Browser("Welcome: Mercury Tours").Page("Find ...

比较你在 #11放的代码和我在 #1的代码,我猜测你在最后一个页面上点击的是BACK TO FLIGHTS 按钮,而不是QTP Tutorial里面要求的 BACK TO HOME 按钮。 点击 按钮后,QTP 会为你自动生成代码
Browser("Welcome: Mercury Tours").Page("Flight Confirmation: Mercury").Image("home").Click

而不是你现在的
Browser("Welcome: Mercury Tours").Page("Flight Confirmation: Mercury").Image("backtoflights").Click

另外,请把下面一行删除:
Browser("Welcome: Mercury Tours").Page("Welcome: Mercury Tours_2").Sync

[ 本帖最后由 walker1020 于 2007-4-11 14:08 编辑 ]

walker1020 发表于 2007-4-11 14:31:21

To limxi520

如果你按照我在 # 12的操作去做,问题应该得到解决。提醒你一下:做测试一定要细心!

风之无痕 发表于 2007-4-11 16:59:46

搂主,你真行,我还没有作呢,在后面肯定能用上!还有我想问下,如果没有实际的项目,怎么才能练QTP除了那个预订票例子以外?

walker1020 发表于 2007-4-11 18:36:32

To 风之无痕

对一道数学题,如果你能用 N 种方法去解决,那么你的收获肯定要远远比解答 N个同类的问题的收获大。QTP Tutorial说的那个预订票例子的所有操作(录制、参数化、置检查点、回放等),你都理解吗? 在 Expert View里面的代码你都理解其含义吗?

walker1020 发表于 2007-4-11 18:37:36

这是一个初学者练习QTP的最好的例子,因为有讲解,还可以来论坛发帖。呵呵!sdlkfj5

风之无痕 发表于 2007-4-12 09:35:40

谢谢你的回答,我想知道要学好这个工具都需要什么编程基础或者别的什么计算机知识的基础?

liyun100 发表于 2007-4-12 15:13:29

谢谢,我也遇到了这个问题,不过我都是手动再录入一次登录名和密码后,就可继续运行了,方法比较笨,也不知道原因在哪,不过现在好了。

zhaojingshu1025 发表于 2007-4-12 16:08:25

回复 #1 walker1020 的帖子

傲傲管用,顶一下!
页: [1] 2 3 4 5
查看完整版本: QTP Tutorial 中的订票操作参数化后无法运行第二行的解决方法