第一篇:QTP脚本语言总结
个人感觉使用该种方式编写脚本的一个最大好处就在于省去管理对象库的成本,但其实对象这个概念并没有放弃,只是通过我们脚本的描述来定义对象,这个时候,如何更准确的描述对象,让脚本运行时更好的定位到,是该种方式的核心之处。
以点击页面的搜索按钮为例,语句如下:
Browser(”title:=.*”).Page(”url:=.*”).WebButton(”html id:=DoSearch”).Click
由于当前只打开一个ie,故可以使用“.*”通配符来定义页面,若页面多于一个时,需要同时指定 浏览器和页面。需要注意的是,某一对象的属性是多元的,当使用一个属性仍然无法唯一确定该对象时可以使用多个属性来定义某一个对象,写法如下:对象类型名(”属性名1:=属性值2″,”属性名1属性值2″),即多个属性用“,”分割。
可能大家习惯使用QTP自带的Object Spy来获取对象的属性,但在这里我想推荐大家结合ie developer toolbar中的find功能来更为准确获取元素的属性(这里需要感谢一下士忠同学的友情提醒和帮助),因为QTP识别对象时本身也会对对象进行一次封 装,有可能不够准确,我在定义某个页面的WebRadioGroup时就遇到过qtp将两个对象封装为一个对象,当使用qtp识别的结果来定义后,脚本运 行时无法找到该对象,后来发现实为两个对象,在对该对象添加了一个唯一的属性定义后即可正确识别,此外,由于对象的属性是多元的,所以更加需要我们选择有 效唯一的属性来识别,尽可能多用类似html id这样唯一的属性来定义(这个时候也可以借助ie developer toolbar的find功能来判定),还有一种特殊的情况需要注意的是,有时候我们发现对象像html id这样的属性值显示为空,这个时候如果能判断该对象的类型在这个页面中是唯一的,同意可以用赋值为空来表示,如”html id:=”,当然该种方式并不推荐使用。
第二篇:QTP面试题
1)支持那些环境?
QTP支持以下环境:
Active X、Delphi、Java、Net、Oracle、People Soft Power Builder、SAP、Siebel、Stingray Terminal Emulator、Visual Basic Visual Age、Web、Web Services
2)QTP的对象库类型是什么?
QTP支持两种类型的对象库:
(1)共享对象库(也叫全局对象库)
(2)单例对象库(也叫局域对象库)
共享对象库在处理多次测试中的静态对象时适用,扩展名是“.tsr”。
默认的是单例对象库,它的扩展名是“.mtr”
3)可以在其他测试中用脚本语言调用QTP测试吗?假设有四个测试,我想在一个主脚本中调用这些测试,这种QTP中可能吗?
答案是肯定的。你可以在你的测试中调用四个甚至更多脚本。为了达到这个目的,需保证相应脚本中的Actions是可重用的。然后从目标脚本中可以使调用这些可重用的actions。
4)什么是action split?在QTP中使用action split的目的何在?
Action split将存在的action拆分为两部分,目的在actions函数的基础上提高代码的可重用性。
5)在QTP中你如何处理Java树?
首先,选择 Java Add-In 启动QTP。第二步记录在Java树中的操作,如果在记录过程中遇到问题,选择Tools > Object Identification > Java、tree object,强制更改辅助属性来启用识别。
提示:对于任何环境的对象,你都可以把用类似的方法回答。
例如:如果问题是你怎样检查SAP多选框,你说,首先我该选择SAP Add in……等等。
6)解释一下QTP是如何识别对象的?
QTP识别任何GUI对象基于其相应的属性。当记录的时候,QTP在对象存储库的GUI对象中识别并且存储特殊属性(如在物体识别设置中定义的一样)。在运行时,QTP将比较存储属性值与屏幕上的属性。
7)QTP中有多少种记录模式?分别在什么时候用到?
QTP支持三种记录模式:
(1)普通模式,也叫上下文模式
(2)低级记录模式
(3)模拟模式
普通模式:默认的记录模式,充分利用了QTP的试验对象模型。它可识别屏幕任何位置的对象。这是重新编码的最佳模式,用于大多数的自动化测试。
低级记录模式: 这个模式准确地记录鼠标操作的x,y坐标。它有助于测试哈希表。它是用于记录QTP的正常模式下的不确定对象。
模拟模式:这个模式记录执行关于屏幕/应用程序窗口时鼠标和键盘的精确“动作”。这种模式对一些操作是很有用的,例如画画、记录签名、拖放操作。
8)你怎样在一个action中调用另一个action?
调用action有两种方法:
(1)调用复制的action。用这种方法,操作对象存储库、脚本和时间戳将被复制到目标测试脚本。
(2)调用现有的action。用这种方法,操作对象存储库、脚本和时间戳不会被复制,但一个调用(参考)将在源脚本的action上生成。
9)什么是虚拟对象?
应用程序可能包含有着像标准对象行为的对象,但不被QTP识别。您可以把这些对象定义为虚拟对象并将它们映射到标准的类,比如按钮或一个复选框。QTP在运行的会话中在虚拟对象上模拟用户的动作。在测试结果里,虚拟对象被当成标准的类对象展示出来。
例如,假设你想记录一个测试包含用户单击的位图的Web页面。位图包含几个不同的超链接区域,每个区域打开一个不同的目的页面。当你记录一个测试,Web站点匹配单击位图的坐标并且打开目标页面。
在运行的会话中启用QTP以点击所需坐标,你可以为一个区域的位图定义一个虚拟对象,其中包括那些坐标,并将其映射到按钮类。当运行一个测试时,QTP单击一个被定义为虚拟对象位图所在区域,这样网址就可以打开正确的目的地页面了。
10)如何使用QTP执行跨平台测试和跨浏览器测试?你能用一些例子解释说明吗?
创建单独的Actions,以满足不同的操作系统和浏览器的需要。
跨平台测试:
用内置的环境变量挖掘操作系统信息。
如:平台=环境(“操作系统”)。然后基于平台需要调用你记录在那个特定的平台的actions。跨浏览器测试:
使用代码Browser(“Core Values”).GetROProperty(“version”),可提取浏览器和它的相关版本。例如:Internet Explorer 6或Netscape 5,基于这个值您可以调用与浏览器相关的actions。
11)对象的逻辑名字是什么?
逻辑名字是QTP 在库里创建一个可唯一地与应用里的其他对象识别的对象时起的名字。它被QTP用来映射对象库中对象名相应的描述。如:Browser(“Browser”).Page(“Guru99”),在这里,Guru99 是对象的逻辑名字。
12)什么是描述性编程?
通常情况下,一个对象及其属性必须被记录在对象资源库,让QTP执行操作。
用描述性编程,你不用在对象资源库里储存对象及其属性值,而是在脚本里提到属性值对。描述性编程背后的这种思想不是想绕开对象库,而是帮助识别静态对象。
13)运用描述性编程的时候,你用什么属性来识别浏览器网页?
可以用名字属性。
如:ex:
Browser(“name:=”xxx“").page(”name:=“xxxx”“).....或者,我们也可以用属性”micClass“。
如:ex:
Browser(”micClass:=browser“).page(”micClass:=page")....14)在远程机器上使用QTP时,我们能否记录应用的运行过程呢?
当然可以。你可以通过本地浏览器而不是通过像citrix 这样的遥控器记录你进入的远程应用。
如果你仍然不能记录,建议您将QTP 和应用安装在同一个机器上。
15)用一个例子解释创建对象的关键词。
创建并返回一个自动化对象的引用。
语法:CreateObject(servername.typename [,location])
参数:
servername:需要。提供对象的应用的名字。
typename:需要。创建对象的类型或者类。
location:可选。创建对象的网络服务器名字。
16)你能在Per-Action 和Shared Object Repository中切换吗?如果能,怎么切换的?可以转换。找到Test,然后选择Settings,最后选择Resources,在这里可以选择储存库了。
17)什么是对象间谍?如何使用它?
对象间谍有助于确定正在被测试的应用的运行测试时间对象属性和方法。
您可以直接从工具栏或者对象库对华康直接访问对象间谍。
这在描述编程过程中非常有用。
18)光序标志符就可以使一个对象独一无二,那为什么不给他们顶级优先权呢?为什么它是先强制后辅助的?为什么我们不能直获取序标志符?
因素如下:
(a)如果两个对象彼此重叠,基于位置的对象识别将失败。
(b)如果仅基于索引识别你的脚本可以运行,但是执行时间将增加。
因此使用强制和辅助的特性。
19)在QTP代码文件中扩展名是什么?
代码的文件扩展名是script.mts.20)简要解释一下QTP自动化对象模型。
QTP自动化对象模型处理自动化QTP本身。几乎所有的QTP提供的配置和功能都用QTP自动化对象模型展示。
几乎所有QTP的对话框有一个相应的自动化对象,可以使用自动化对象模型的相关属性或者方法设置或检索。
QTP自动化对象可以和标准的VB编程元素一起使用,如迭代循环或条件语句来帮助你设计脚本的选择。
第三篇:传奇脚本语言之不完全攻略
程 序 语 句 与 程 序 段
换一行
{图像类别/图像定位};图像类别是说明动物或NPC图像定位是指那一个具体图像
[@段];段用英文或数字表示
goto @段
;跳转到指定段,开始执行相当于B中的goto语句
<选择项目/@段>;选择项目后转称到指定段,相当于C中的case语句
#say 语句
;语句设定为字符,不用加任何定界符
#act 执行命令
;符合3.0规定的任何系统已定义命令
give 物品 数量
;给多少东西,除了物器数据库中有的物品,还有金币,;在大多数汉化版3.0中都汉化为“金”
take 物品 数量;同上,只是与上面相反,一个是给东西,一个是收回东西
map 地图名
;移动到这个地图的随机坐标,地图名为地图的数字人码
mapmove 地图名 坐标A 坐标B;同上,只是指定了坐标
monclear 地图名
;清除这个地图上刷的怪物
MonGen 怪物名称 数量 时间;刷怪物,与刷怪角本用法相同
TimeRecall 数值
;数值为分钟,定义进入某地的时间限制。
BreakTimeRecall
;中断上面那个语句设定的时间
hairstyle 数值;改变头发类型
haircolor 红值 绿值 蓝值;值域为0 ~ 255 设定头发颜色
close;关闭对话框
======================****************************========================----------------------程 序 中 的 变 量 与 常 量------------------------======================****************************========================
变量
;变量用字母表示,在程序中可以赋任何数据 名称只限于P0-P9,D0-D9
mov 变量 数值;给变量赋值
inc 变量 数值;让变量自动加指定数值到变量,相当于程序中的x=x+n
sum 变量A 变量B;变量求和不要与int混淆,需要下面的组合语名才能实现
MOV 变量X 0;变量X,初值。sum 变量A 变量B;X=A+B sum 变量C;X=X+C 最后在程序中得到的是X值,实际X=A+B+C
;如果只写中间一句是无意义的,只能导致错误
movr 变量 数值;定义随机变量,变量值为 “0 到 数值”
random 数值
;当数值=随机数时则为1否则为0
<$STR(变量)>;显示变量时用,可以将变量值显示在游戏里,用在 #say后面。
=========================*******************************========================-------------------------程 序 中 的 逻 辑 判 断 语 句------------------------=========================*******************************========================
[n]
;n为任何正整数,是逻辑变量,有0值和1值,初始0值
#IF 条件--执行
#elsesay 或者 #elseact 否定--执行
;相当于程序中的条件判断
SET [n] 1
;设置逻辑变量为真
Check [n] 1
;测试逻辑变量是否为真,可以测试是否已经完成了任务
small 变量 数值;如果“变量 < 数值”则为1否则为0
large 变量 数值
;如果“变量 > 数值”则为1否则为0
equal 变量 数值
;如果“变量 = 数据”则为1否则为0
checkjob Warr(Wizard、Taos);测试职业 成功为1否则为0
checkgold 数值
;拥有金币数>=数值为1否则为0
checklevel 数值
;人物等级>=数值为1否则为0
checkitem 物品 数值;测试拥用物品的数量
genderman;测试性别为男,如果为男则为1否则为0
checkbaggage;测试背包是否已满,满时为1否则为0
checkpkpoint 数值
;数值为PK值,PK值数>值时为1否则为0
checkluckypoint 数值
;同上,只是测的是幸运值
checkmonmap 地图名 数值;同上,只是测的是怪物数量
checkduraeva 物品名 数值;同上,只是测试有品质的物品的品质
checkhum 地图名 数值
;同上,测试这个地图的人数
checkitemw 物品
检测身上所带的物品
takew 物品
直接从身上回收物品
checkmagic 技能名称
检测已经修炼的技能 脚本大全 [喜欢脚本的来] 传奇商用NPC开头解释(部分,补足请补足)%100 代表买东西是原价格还是双倍价格 +40 买肉 +1 卖肉
+43 武器有关(修)+15 头盔 +10 买衣服 +11 修衣服 +26 修手镯类 +0 买各种药水 +42 卖各种药水 +30 蜡烛等.+25 特殊水 +3 买卷轴,书类 +4 卖书类 +19 项链 +20 项链 +21 项链 +22 买戒指 +23 卖戒指 +24 买手镯 +26 卖手镯
+5 修炼武器或买武器 +6 修炼武器或卖武器
================================
checkjob(Warr, Wizard, Taos);测试职业 checkgold(金币数);测试金币 checklevel(等级);测试等级
checkitem(物品名)(数量);测试物品及数量 give gold(金币数);给钱
give(物品名)(数量);给物及数量 take gold(金币数);拿走钱
take(物品名)(数量);拿走物及数量 checkpkpoint(pk值);测试PK值
checkluckypoint(幸运值);幸运值正值为好,负值为差
checkduraeva(物品名)(数值);一般测试矿物等物品的品质 checkhum(地图名)(数值);测试这个地图的人数
checkmonmap(地图名)(数值);测试这个地图的怪物数 map(地图名);移动到这个地图
mapmove(地图名)(坐标A)(坐标B);移动到这个地图指定坐标 monclear 地图清除 close 关闭对话框
TimeRecall(设定时间值);分钟,一般指进入地图时间限制 BreakTimeRecall;中断设定时间
ExchangeMap(地图名);与指定地图里的人交换位置 daytime sunset;一天时间 checkbaggage;测试背包满没
small(变量)(数值);测试变量是不是小于指定数值 large(变量)(数值);测试变量是不是大于指定数值 equal(变量)(数值);测试变量是不是等于指定数值 mov(变量)(数值);让变量等于指定数值
sum(变量A)(变量B);A+B 注意,如果还要家第3个数直接换行写sum(变量C)注:关于SUM的详解
首先有MOV(变量X)0;(变量X)清0 sum(变量A)(变量B);X=A+B sum(变量C);X=X+C movr(变量)(数值);随机把指定数值以下的数(正数)给变量 inc(变量)(数值);让变量自动加指定数值到变量 playdice(骰子数)@xxx;玩骰子,跳转到标签[@xxx] random(随机数);一般用在#IF语句中作为触发#IF机率,有时随机数=并列#IF语句数用 于随机多项选择,例如: #IF RANDOM 3 #SAY()#ELSEACT Check [条件数] 1;测试[条件数]触发与否 1(触发)SET [条件数] 1;设置[条件数]触发 Monclear 地图 清理这个地图!Param1 地图 地图名 Param2 横坐标 坐标 Param3 纵坐标 坐标
MonGen 怪物名称 数量 时间 TimeRecall 时间 时间限制
二。脚本变量:
<$USERNAME> 当前用户名
<$GUILDWARFEE>行会战金币数 <$LORD>沙巴克行会头名
<$OWNERGUILD>沙巴克行会名
<$UPGRADEWEAPONFEE>升级武器价格 <$USERWEAPON> 放在对话框里的武器名字 <$STR(变量)> 把变量转换为字符型
NPC脚本里的彩色文字控制
从上到下:
{FCOLOR/1}文字{FCOLOR/12} {FCOLOR/2}文字{FCOLOR/12} {FCOLOR/3}文字{FCOLOR/12} {FCOLOR/4}文字{FCOLOR/12} {FCOLOR/5}文字{FCOLOR/12} {FCOLOR/6}文字{FCOLOR/12} {FCOLOR/7}文字{FCOLOR/12} {FCOLOR/8}文字{FCOLOR/12} {FCOLOR/9}文字{FCOLOR/12} {FCOLOR/10}文字{FCOLOR/12} {FCOLOR/11}文字{FCOLOR/12} {FCOLOR/12}文字{FCOLOR/12}...........不过一般常用比较好看的就有: {FCOLOR/1}红色{FCOLOR/12} {FCOLOR/10}绿色{FCOLOR/12} {FCOLOR/11}蓝色{FCOLOR/12} {FCOLOR/14}浅蓝色{FCOLOR/12} {FCOLOR/15}黄色{FCOLOR/12}
[转帖]3.0GT版**脚本命令(已整理)+MapInfo条件解释
[转帖]3.0GT版**脚本命令(已整理)+MapInfo条件解释
======================****************************========================--------------------程 序 语 句 与 程 序 段-----------------------------====================********************************====================== 换一行 换二行
{图像类别/图像定位};图像类别是说明动物或npc图像定位是指那一个具体图像 [@段];段用英文或数字表示
goto @段;跳转到指定段,开始执行相当于b中的goto语句
<选择项目/@段>;选择项目后转称到指定段,相当于c中的case语句 #IF #SAY 语句;语句设定为字符,不用加任何定界符 #ACT 执行命令;符合3.0规定的任何系统已定义命令 #ELSEACT #ELSESAY @exit;关闭对话框 close;由程序执行@exit break Delaygoto [Grobal] 120 @段;120秒后进入@段
======================****************************========================----------------------程 序 中 的 变 量 与 常 量------------------------======================****************************========================
变量;变量用字母表示,在程序中可以赋任何数据 名称只限于A0-A9字符型 B0-B9字符型 D0-D9数字型 P0-P9数字型
S0-S9数字型 服务器共享变量 N0-N9 数字型 B1-B9 字符型 #Define N0{START} N0 #Define N1{WEDDING} N1 #Define N3{TIME} N3 #Define N4{TRY} N4 #Define N5{WAITINGTIMEOUT} N5 #Define N6{MAN} N6 #Define N7{GIRL} N7 #Define B1{MANNAME} B1 #Define B2{GIRLNAME} B2 #Define B3{INPUTGIRLNAME} B3 mov 变量 数值;给变量赋值 A0-A9字符型 B0-B9字符型 D0-D9数字型 mov A0 “字符” mov D0 数字
inc 变量 数值;让变量自动加指定数值到变量,相当于程序中的x=x+n dec 变量 数值;让变量自动减指定数值到变量,相当于程序中的x=x-n sum 变量a 变量b;变量求和不要与int混淆,需要下面的组合语名才能实现 mov 变量x 0;变量x,初值 sum 变量a 变量b;x=a+b sum 变量c;x=x+c 最后在程序中得到的是x值,实际x=a+b+c
;如果只写中间一句是无意义的,只能导致错误
movr 变量 数值;定义随机变量,变量值为 “0 到 数值” random 数值;当数值=随机数时则为1否则为0 <$str(变量)>;显示变量时用,可以将变量值显示在游戏里,用在 #say后面
=========================*******************************========================-------------------------程 序 中 的 逻 辑 判 断 语 句------------------------=========================*******************************======================== [n]
;n为任何正整数,是逻辑变量,有0值和1值,初始0值 #IF *** #ACT *** #SAY *** #ELSEACT *** #ELSESAY *** ===================== #IF not CheckItem 钢玉石 1 or not CheckGold 10000 #ACT *** ============ set [n] 1
;设置逻辑变量为真
check [n] 1
;测试逻辑变量是否为真,可以测试是否已经完成了任务 small 变量 数值;如果“变量 < 数值”则为1否则为0 数值比较 esmall 变量 数值;如果“变量 <=数值”则为1否则为0 字符比较 large 变量 数值;如果“变量 > 数值”则为1否则为0 数值比较 elarge 变量 数值;如果“变量 >= 数值”则为1否则为0 字符比较 equal 变量 数值;如果“变量 = 数据”则为1否则为0 checkjob warr(wizard、taos);测试职业 是为1否则为0 checkgold 数值;拥有金币数>=数值为1否则为0 checklevel 数值;人物等级>=数值为1否则为0 checkitem 物品 数值;测试包裹物品的数量 checkitemw 物品;检测身上所带的物品
gender man
;测试性别为男,如果为男则为1否则为0 checkbaggage;测试背包是否已满,满时为1否则为0 checkpkpoint 数值;数值为pk值,pk值数>值时为1否则为0 checkluckypoint 数值;测幸运值
checkmagic 技能名称;检测已经修炼的技能 chkmagiclevel;检测技能等级
checkduraeva(物品名)(数值);一般测试矿物等物品的品质 checkduraeva 钢玉矿石 10 checkhum(地图名)(数值);测试这个地图的人数
checkmonmap(地图名)(数值);测试这个地图的怪物数 checkmonrecall;检测宠物 checkhorse
;检测是否有马 checkweaponlevel;GETMARRIED
;检测有否结婚
=========================*******************************========================-------------------------商 人 用 npc 开 头 解 释 部 分-----------------------=========================*******************************======================== %100 代表买东西是原价格还是双倍价格 +40 买肉 +1 卖肉
+43 武器有关(修)+15 头盔 +10 买衣服 +11 修衣服 +26 修手镯类 +0 买各种药水 +42 卖各种药水 +30 蜡烛等 +25 特殊水
+3 买卷轴,书类 +4 卖书类 +19 项链 +20 项链 +21 项链 +22 买戒指 +23 卖戒指 +24 买手镯 +26 卖手镯
+5 修炼武器或买武器 +6 修炼武器或卖武器
=================================== changegender Map 地图名
;移动到这个地图的随机坐标,地图名为地图的数字编码 Mapmove 地图名 坐标x 坐标y;移动到这个地图指定的坐标 Monclear 地图代码
;清除这个地图上刷的怪物 MonGenP “RUSH1,40,40,30” 诺玛法老 16;刷怪物 MonGenP “RUSH1,40,40,30” 大法老 4;刷怪物
Timerecall 数值
;数值为分钟,定义进入某地图的时间限制 Breaktimerecall
;中断上面那个语句设定的时间 Hairstyle 数值
;改变发型
Haircolor 红值 绿值 蓝值
;值域为0 ~ 255 设定头发颜色 Give 金币(金币数)
;给钱
Give(物品名)(数量)
;给物及数量 Take 金币(金币数)
;拿走钱
Take(物品名)(数量)
;拿走物及数量 Takew 物品
;直接从身上回收物品
Exchangemap(地图名)
;与指定地图里的人交换位置 Daytime sunset
;一天时间
Speak “%A0”;白色字全服讲话
lineMsg [Grobal] “%A0”
;红色字全服讲话 LineMsg “Grobal” %A0
;LineMsg “Island02” %A0
;LineMsg “Island02” “内容”;ChangeMapAttr “3” “SAFE”;SetAreaAttr “3, 206, 159, 6” “NoFly”;SetAreaAttr “3, 206, 159, 10” “NoLack”;CheckHum “Island02 100 125 125” 1;Delaygoto [Grobal] 120 @段;120秒后进入@段 MonClear “Island02” “猿猴战士”;MapTing Island02 01 100 130;MapTing Island02 Island02 100 133;MonGenP “Island02,100,130,5” 聚宝箱4 1 “noitem,金币,100000” SendCmd “Island02, 95, 135, 5” 生存游戏场美眉 Show FormatStr “noitem,金币,%s” 5000000;Addstr A3 %A2
;SetAreaAttr “02, 400, 400, 500” “NoLack” MongenP “02,225,240,20” 年兽 10;ApplyMonMission “02,225,240,9999” “年兽” “02,256,201” SetAreaAttr “02, 400, 400, 500” “Clear” =========================*******************************========================-------------------------========地图(MAPINFO)========------------------------=========================*******************************======================== FIGHT
;战斗区域(如果设FIGHT3 ,就是行会地图常设定的可复活三次.)SAFE
;安全区域
DARK
;地图是黑暗的
NEEDHOLE
;是否需要洞,配合mapinfo里 xx,xx-> yy,yy使用
;(MONSTER 任何怪物RACE代码设为95都可
;xx,xx为进入洞口坐标,在Mongen.txt里xx坐标刷新一怪物即可)NORECALL
;不能用天地合一命令的地图
NORECONNECT(D1601)
;重新连线就被传送到(D1601)中指定的地图 NORANDOMMOVE
;不能用随机的地图
NOPOSITIONMOVE
;不能使用传送戒指的传送指令传送的地图
NODRUG
;不能使用任何药物和卷轴等物品(可用来编不能补血等闯关脚本)
NEEDSET_ON(变量)
;判断是否符合变量 =1 满足 =0 否(配合mapinfo使用可扩展脚本内容.;如增加某个条件,完成任务后才允许进入某地图.MINE
;金属矿 MINE2
;石矿 HORSE
;可骑马 DAY
;地图全亮 FOG
;起雾
NOSPACEMOVE
;不能用回城卷
=========================*******************************========================------时间--------=========================*******************************======================== daytime sunset
;日落 daytime sunraise
;日出 daytime day
;白天 daytime night
;夜晚 GETDATE;获取日期
YEAR;检测年份 MONTH
;检测月份 DATE
;检测日期 HOUR
;检测小时 MINUTE
;检测分钟 SECOND
;检测秒 =========== #IF MONTH 4 5 DATE 15 20
;如果在4月15日----5月20日(范围)满足条件 #ACT ***
======= MapInfo文件条件解释
1.FIGHT 战斗区域(如果设FIGHT3 ,就是行会地图常设定的可复活三次.)2.SAFE 安全区域
3.DARK 地图是黑暗的
4.NEEDHOLE 是否需要洞,配合mapinfo里 xx,xx-> yy,yy使用
(任何怪物RACE代码设为95都可.xx,xx为进入洞口坐标,在刷怪文件里xx,xx坐标刷新一怪物即可)5.NORECALL 不能用天地合一命令的地图
6.NORECONNECT(地图代号)重新连线就被传送到()中指定的地图 7.NORANDOMMOVE 不能用随机的地图
8.NOPOSITIONMOVE 不能使用传送戒指的传送指令传送的地图
9.NODRUG 不能使用任何药物和卷轴等物品(可用来编不能补血等闯关脚本)10.NEEDSET_ON(变量)判断是否符合变量 =1 满足 =0 否
(配合mapinfo使用可扩展脚本内容.如增加某个条件,完成任务后才允许进入某地图.11.CHECKQUEST(Q001)上面的Q001其实就是放入MapQuest_def的文件.12.NOSPACEMOVE 限制结婚戒指 13.NOCASTLEMOVE 限制行会移动
14.NOSPELLMOVE NOSPACEMOVE结婚,师徒限制
======================================= NPC形象代码,解释的非常详细,都来看看人物代码 名称 小头像代码 注解
0 铁匠 0 手里拿着铁锤的人 长者 10 戴着帽子留着长胡子的老人,并且不停的整理自己的帽子 查询 20 手里拿着册子,留着长胡子的老人,躬着腰,不停地摆动着手好象要求你查看的样子 猎人 30 背上背着个黄色的斗笠,腰间挂着个绿色的布袋,双手插腰,不时的在额头上擦汗 厨师 40 头上扎着头巾,胸前挂着围裙象个厨师,身穿紫色长裙,不时摆弄自己的发型妇人 50 黑色马尾辫,胸前挂着围裙象个厨师,身穿紫色长裙,不时伸懒腰 村姑 60 蓝色马尾辫,胸前挂着围裙象个厨师,身穿紫色长裙,不时摆弄自己扎头发的扎带 服装店女人 70 头上带了很多发钗,双手握住垂在下面,不时象在摆弄布料的姿势比齐丞相 80 一身白褂,带帽子,手里拿把扇子,不时的扇动 老翁 90 双手放在胸前,略躬着腰,戴着长长的帽子,腰间有条围裙,不时的揉自己的眼睛 重量级的妇人 100 KG,比屠夫还胖,还举起小手,扭动自己肥大的身体屠夫 110 不用介绍了吧 小姐 121 就穿着肚兜的小姐,很性感,还不时摆动自己的小手 会计 130 一身红袍的妇女,带着个少数民族的帽子,手里拿着算盘,不时的在算帐天尊 140 不用介绍了吧 武师 150 一身绿甲,扎着绿色长马尾辫,不时的擦拭着自己手上的剑 巡捕 160 手上拿着一跟木棍架在肩上,头上戴着个小帽子,举手遮阳眺望,好象在找人茶楼老板 170 头戴白色小帽子,一手拿着茶壶,一手拿着竹扁,不时用两样相互敲打读书人 180 一身绿衣,扎着绿色长马尾辫,不时的翻着手中的书,再躬下身探望伤者 190 盘腿坐姿,胸口有红色血迹,不时做弯身动作 法师 200 手上拿着个东西,右手不停的晃动,好象在表演魔术一样练武者 210 在白日门练功的人 毒药师 220 一手拿着册子,一手拿着药瓶,一边看瓶,一边看书洗衣人 230 拿个木桶,在洗衣服的样子,应该是衣服的特修员拿着木棍的天尊 240 跟天尊差不多,只是手上拿着个木棍 店小二 250 头上扎着黄色布巾,双手低垂在胸前,好象在服侍人一样马商 260 肌肉很发达,不时在摆弄自己的肱二头肌 赤膊的铁匠 280 手上拿着铁锤,边上还有个火炉,最后还敲打一下火炉,应该是武器特修员 赤膊大肚男 280 头上扎着白布巾,手上拿着个罐子,不时敲打手中的罐子迎宾男人 330 不时的躬身,双手伸出好象是在欢迎请进的意思 迎宾女人 300 身穿黄色上衣和大红色的长群,不时的鞠躬,好象是在欢迎请进的意思
博学长老 310 身穿绿色长袍,头戴尖帽子,手中拿着一本书在看,不时的擦汗
灰色伙计 320 身穿灰色衣服,头戴尖帽子,手中拿着一本书,不时的转身好象掂起脚在查阅什么,好象应该是盘点吧
橙色伙计 330 身穿橙色衣服,头戴尖帽子,手中拿着一本书不时的在查阅
红帽老人 340 头戴红色布巾,挺着大肚子,象个印度人
蒙古女人 350 看穿着象是蒙古人,36 蒙古男人 360 看穿着象是蒙古人,还不时的举起双手伸懒腰
考生 370 拄着个拐杖,腰间挂着个布袋,还不时的打哈欠
女巫师 380 拿个法杖不停的举起来双手,好象在祈祷什么
扫地工 182 身边地上放了个水桶,自己拄着扫帚在扫地
酒店骚女人 290 做在酒缸上,还不时做出很骚的动作
船家 280 拿着个船浆在等客人
守卫 430 大刀守卫 44 眺望者男 270 一直背对你,不停在看远方
战士 270 一个身穿盔甲的战士
将军 140 一个身穿黄金盔甲的老将
战将 431 一个身穿黄金盔甲的光头
法神 140 拿着嗜血魔杖的老人
女战将 122 一个身穿白银盔甲的战士
眺望者女 70 一直背对你,不停在看远方
公告牌 象个小牌坊的公告栏
公告栏 象个用木条钉起来的公告栏
左侧书架 一个向右倾斜45度的书架
右侧书架 一个向右倾斜45度的书架
倒塌的城墙
传送石1 57 传送石2 58 骷髅
巨石
船夫 182 拿着一个很长的浆的船夫
猛男 31 一个光头,头上扎着布巾,肌肉很发达
路人 280 好象是赶路的人停下来歇脚,肩上挂了个大缸,手上还拿着一样东西
路人 280 好象是赶路的人停下来歇脚,肩上挂了个大缸,手上还拿着一样东西
雪人 没有两边插上树枝的雪人
树枝雪人 两边插上树枝的雪人
全服喊话人物显示 武士 男 42 女43 法师 52 53 道士 62 63 还有1个 72 83
第四篇:软件测试工作中使用QTP的总结
软件测试工作中使用QTP的总结---转
上一篇 / 下一篇2009-08-18 13:26:28 / 个人分类:测试
查看(68)/ 评论(1)/ 评分(1 / 0)
工具软件一段时间不用就容易手生,有个备份整理以后复习都事半功倍。之前就打算好好弄一下一直拖着没动笔。网上QTP的学习资料大把大把,那些基础的理论东西看过就过了,实践才是王道,操作几个小时胜过看一天的说明文档。这里列一些我在用QTP时遇到印象比较深刻的问题和解决方案,其他的小问题属于QTP熟练操作的范畴就不赘述了。因为项目需要接触了差不多三个月的QTP,自知离QTP高手还有段距离,学无止尽,有学习QTP的朋友欢迎发表高见大家互相进步~
1、QTP自带函数print
调试代码的时候一般习惯用Debug或者Msgbox函数。监视变量运行时的值用Msgbox,个人感觉不方便的一点就是每次在msgbox窗口弹出来后,脚本会暂停执行,等到鼠标点确定后窗口才会关闭继续运行后续脚本,真的很烦,做自动化测试的时候我真的是已经懒到不愿意动一根手指头。某天无意发现QTP自带的函数print也可以实现查看变量信息,窗口是非模式的,运行时变量值在 QuickTest Print Log窗口上输出但脚本不用停下来等,而且可以在一个session运行完了之后查看所有需要监视的变量值。
Eg:
Dim p
p=Browser(“xx”).page.(“xx”).webedit(“object_name”).GetROProperty(“value”)
print p2、calender控件
一般日期格式字段是同时支持手填日期格式的text field和用鼠标点日历控件选择。但是在DMPOD系统里发现部分日期格式的字段居然disable了用户手动输入的属性,只能靠点日历控件来选择日期。结果录到的脚本全变成了img.click,无法回放。查了很久突然某一天找到了办法,绕过这个控件,强制转换它的属性值。
Eg:
Dim var_object
Set var_object=Browser(“xx”).page(“xx”).webedit(“calendar_name”).Object
Var_object.readonly=false
Browser(“xx”).page(“xx”).webedit(“calendar_name”).set “4/24/2009”
3、homepage menu
曾经困扰了我很久。Homepage dropdown menu 需要鼠标移动到主菜单名上才会显示子菜单目录,click子菜单目录进入页面。QTP总是无法捕捉到鼠标移动带出子菜单目录这个操作,解决办是用mouseover。
Eg:
Browser(“xx”).page(“xx”).webelment(“homepage menu name”).FireEvent “onMouseOver”
Browser(“xx”).page(“xx”).webelment(“sub menu name”).Click4、自定义checkpoint
在页面提交保存后,自定义设置一个检查点,通过判断某个变量值是否满足预期,如果是,则保存成功,如果不是则保存失败。
Eg:
If Browser(“xx”).page.(“xx”).webedit(“object_name”).GetROProperty(“value”)=“AA” Then
Reporter.ReportEvent micPass,“AA checkpoint”,“page is saved successfully”
Else Reporter.ReportEvent micFail,“AA checkpoint”,“page is not saved successfully”
End If5、编程性描述语言识别对象
刚开始一段时间,一直不知道QTP除了用对象库识别对象外,还可以用编程性描述语言。后来查了网上的资料才明白过来。
第一种方法:
Browser(“CreationTime:=0”).Page(“index:=1”).WebEdit(“name:=” & edit).Set “ha”
我没有尝试过,总感觉不如对象库来的方便,在对象库中可以直接选择和修改用来识别对象的属性,以及highlight object等功能。
第二种方法:
碰到过一个Case是,页面上table A里的checkbox元素数量每次运行时都是不相同的,随着页面上另一个对象B的值而改变,对象B的值又是参数化的,最后造成checkbox数量运行前无法预知。操作时又需要每次都选上所有的checkbox。最后用这种识别对象方法可以顺利实现。
Public function SelectAllCheckBox()
Set NewObject = Description.Create '创建满足下面三个条件的对象集
NewObject(“micclass”).value =“WebCheckBox”
NewObject(“html tag”).value=“INPUT”
NewObject(“class”).value = “checkBox_class”
Set NewObjects = Browser(“xx”).Page(“xx”).ChildObjects(NewObject)'实际运行时的对象
Numbers = NewObjects.Count 'checkbox的个数
For i = 0 to NewObjects.count –1 '循环
NewObjects(i).Set “ON” '每一个checkbox都set on
Next
End Function6、相对路径
Setting: Tool--option--folder
经常有action调用别的test里的action或者外部vbs文件,访问功能库和环境变量,这时使用相对路径可以保存有效的路径信息,提高了脚本可移植性。因为脚本文件是需要复制到别的机器共享给其他同事用的。
7、正则表达式对象库里对每个对象都可以设置是否用正则表达式来参数化识别。脚本里也可以用。
当时的case是,页面提交保存完了会自动生成一个文档号,文档号是需要输出到data table里,但是那个字段developer在设计的时候居然用了一个webelment的类而且字段值居然是整个table的name,如―xyz— ABC20090101‖,我只要后面的文档号前面的―xyz—‖是多余的,需要拿到这个对象值后转换成正确的字符串格式才能输出到data table里。
Eg:
Function regEXfun(patrn,strng)
Dim regEX,Match,Matches
Set regEX = New RegExp
regEX.Pattern=patrn
regEX.IgnoreCase=False
Set Matches =regEX.Execute(strng)
Set Match=Matches(0)
RetStr=Match.value
regEXfun=RetStr
End Function
Dim preNO,newNO
preNO=Browser(“xx”).Page(“xx”).WebElement(“NO”).GetROProperty(“innertext”)
newNO=regEXfun(“ABC……..”,preNO)'虽然每次NO都不一样,但是格式是固定的:字符串长度总是11位,以ABC开始,后面的数字是随机,所以用ABC来匹配字符串
DataTable.Value(“NO”,dtGlobalSheet)=newNO8、密码
如果登录页面的密码数据来源是data table,那么要提前准备密码。显然只能用明文,比如123456,但是QTP录制输入密码时自动生成的脚本是用SetSecure的方法生成一大串密文,如果这样每次改密码的时候都要用密文到data table里,很郁闷,这种case时只要手动把SetSecure改为Set就OK啦~
9、waitproperty
在用QTP的过程中,有时因为要等待某个对象的值出现,加上wait()方法.但是wait里的时间参数,是根据经验估计出来的, 这个对象每次运行时可能需要load的时间不一样,有时候9秒有时候3秒,只好设置成wait(10),让QTP等10秒,但是如果对象在10秒内已经 load完,QTP还是会继续等到10秒后才往下继续执行,浪费了很多时间.有个办法是用waitproperty 方法.这样这个对象在10内出现的话,QTP就会继续往下执行脚本,不用等完10秒。
Browser(“xx”).Page(“xx”).WebButton(“abc”).WaitProperty “visible”,true,10
第五篇:QTP 时间等待方法小结
QTP 时间等待方法小结
(2010-04-07 09:52:02)
转载▼
标签: 分类:QTPstudy
qtp 时间等待 it
QTP 时间等待方法小结 1:死等法:
wait(10)。
wait方法可设定指定的等待时间,时间单位为秒,但这个时间只能是固定的,即必须等到这个时间才能继续执行。缺点:有时候会浪费时间,有时候因时间把握不准确而少设定了时间。2:waitproperty windows(“XXX”).dialog(“XXXXXXXX”).waitProperty “visible”,true,50000 方法中的visible是属性,true是属性的值,50000为最长等待时间,单位为毫秒。即在最长等待时间内任意时刻visible的值为true了,脚本继续向下执行,直到等到最大等待时间,然后给出waring。注意:如果超出最大等待时间,QTP报告中的结果是warning,而不是fail。3:Exist(10)windows(“XXX”).dialog(“XXXXXXXX”).Exist(10)方法中的10的时间单位为秒。
该方法与waitproperty方法类似,个人认为比waitproperty方法好用一些。
三种方法各有特色,看个人喜好而用,不过个人认为第三种方法好于前两种。希望对大家学习有益。