FWScript 变量
FWScripts 属于动态类型脚本语言(类似于Python,JavaScript),也就是说,变量的数值类型是在赋值过程中自动确定的,而且是可以变化的。
FWScript常规变量名称必须以符号'$'开头。变量无需声明,在给变量赋值的时候创建这个变量(与Python的处理方式类似),每次根据赋值语句确定其数值类型和内容,也可以再次使用不同的数值类型赋值;如果从未赋值,则值为"undefined"(与JavaScript类似)。
- 数值类型
- 常规变量
- 数据源
- 控件元素
- Web元素
- 集合变量值
- 特殊变量
- 变量值类型转换
数值类型
变量具有各种数值,数值有如下类型:
Type | 类型 | 描述 |
---|---|---|
Int | 整数 | 32位的整数值,如23,45,-67 |
Float | 浮点数 | 带小数点的数,如1.2,0.2,-4.5 |
Bool | 布尔 | true,false(不区分大小写) |
String | 字符串 | 固定长度的字符数组 |
Array | 数组 | 由不同或相同对象组成的集合,系统中按特殊的数据源进行处理 |
Data List | 数据源 | 含有一列或多列的一行或多行数据,相当于Table(表) |
Element | 控件元素 | 代表windows系统中的一个控件Control,参见 |
Elemnet List | 控件元素表 | 一个或多个控件组成的集合 |
WebElement | Web元素 | 一个HTML DOM中的一个元素 |
WebElemnet List | Web元素表 | 一个或多个Web元素组成的集合 |
Bson | 相当于Json,可以存储结构信息 | 可以从Json文件中导入,也可以直接定义。可通过Bson的取下标的方式获取其内容,也可通过取属性值的方式获取其内容 |
BsonArray | Bson数组 | 比上面的数组在定义与修改方面更灵活些,但其元素不能为Element |
注意:在FWScripts中没有字符数值类型(GoLang语言中也没有字符类型 😊), 但提供了特殊的使用方式来支持提供字符值。
参见后面内容以及 常量 、表达式。
数组被当作一种特殊的数据源,有特殊的定义与使用方法,参见数据源
常规变量
以$开头,后面跟标识符,标识符的定义使用C语言的标准(字母或下划线开头,后跟字母、数字或下划线)。
实例
$a=8 $b=13.14 $c=true $d="hello world" $List=^("a","b","c")
全局变量与函数内部变量
FWScript中的变量分为全局变量和局部变量(也叫函数内部变量),在函数外面使用的变量都为全局变量,而在函数里面使用的变量,包括形参,都是局部变量
正如几乎所有语言的惯例,函数内部的变量为每次调用的时候使用,不同的调用该变量是不同的。
FWScript要求在函数内部使用全局变量的时候,必须显式申明,使用语句:GlobalVar 或 Global (可以使用符号^$),后跟以逗号隔开的变量清单。如“Global a,b,c,d”
很多语言隐含确定全局变量与局部变量,只要全局变量申明过,而在函数内部没有声明同名的局部变量,则自动作为全局变量使用。FWScript目前不支持这个隐含的规则,也就是说,若要使用全局变量,必须使用关键字Global进行申明。
注意如果在声明全局变量的时候,发现这个变量在全局不存在,则作为脚本错误报错;
如果这个变量在声明全局变量的时候,已经在局部变量中使用了,则输出警告信息,仍旧使用局部变量。
字符
FWScript 没有为字符特别设立一个数值类型,但提供特殊的方法处理字符。
如果希望存储一个字符的值,使用$var=%c 或 %\c,如%1=%a 则$1中存放的就是字符a的Unicode码值;$1=%\n 则$1存放的是换行符的Unicode码值,你也可以理解成$1里面存放的就是字符a或\n。
如果希望将一个字符放到一个字符串中,则可以使用特殊的运算符“||”,如 $2="it is " || $1 的结果为"it is a"。 $2 || $2 的结果为 "aa",而"it is " + $1 则结果为 "it is 97"
数据源
数据源属于数值的一种类型,主要用于在测试过程中给各个变量循环赋值,从而达到使用数据驱动测试的目的。
参见 FWScript 数据源
控件元素
控件指的是Windows系统中的一个界面元素,如一个窗口,一个按钮等等,参见:FWScript 控件识别, 如果一个变量的数值类型为控件元素,则可以取出其属性值。
参见 FWScript 控件属性
Web元素
Web元素相当于Selenium里面的RemoteWebElement,指的是Web页面中的一个界面对象,如一个按钮,一个题头,一个表格等等,可以使用下标取出这个变量的属性值。
参见 Web元素的属性
变量的申明与"Undefined"
在FWScript中,没有变量申明的环节,变量总是在第一次赋值的时候自动申明并进行创建。
如果一个变量没有被申明,但出现了引用,一般会报错,只有一种特殊的情况,是不报错的:当出现在“==”的左边的时候,而且右边为Undefined或者字符串“Undefined”的时候,则不报错。
具有集合特性的变量值
具有集合特性的变量值有:字符串、数据源、数组、Bson数组和元素表,称为为集合变量值,针对集合变量值,有特殊的运算方式,可按如下方式获得其长度以及下标值:
代码 | 描述 |
---|---|
$Var.*L | 取出这个集合变量值的长度,L不分大小写 |
$Var[ddd] | 取出这个集合变量值在ddd位置的元素值 如果是字符串,结果为一个整数 如果是数据源,结果为含一行的数据源 如果是元素集合,结果为元素 |
$Var[begin-end] | 取出这个集合变量从begin到end的子集 |
$Var[begin-] | 取出这个集合变量从begin到最后的子集 |
$Var[- end] | 取出这个集合变量从0到end的子集,- 后面一定要有个空格,否则表示倒数第end个 |
$Var[$d] | 取出这个集合变量在ddd位置的元素值,使用的是数字变量的值 |
$Var[$d-$d] | 取出这个集合变量从begin到end的子集,使用的是数字变量的值 |
注意,下标总是从0开始算起,像Python中定义的一样,-1代表最后一个,-2代表倒数第二个
特殊变量
系统保留的具有特殊含义的变量,如下所示:
变量 | 描述 |
---|---|
$ | 总是代表当前的控件元素,(有的时候作为别的用途,如当从控件集合中定位具体控件的时候),在条件表达式中$具有一种“指代”的特殊含义 |
$$ | 外部调用后的输出结果,或者是控件寻找后的集合(没找到控件返回false),以及等待事件后的结果。 |
$0-$9 | 固定的10个变量(称为数字变量,就像汇编语言中的寄存器一样,用于临时使用,处理的效率也高些),在模块与函数等调用中,作为参数的传递。FWScripts定义了一些“调用的特殊约定”,大多利用数字变量,例如,在嵌入的Powershell脚本中,可以使用变量$1-$9,FWScripts的解释器(亦即BizRunner)在每次执行这些脚本前,会将数字变量的值传入Powershell执行空间,而在这些脚本执行完后,会从PowerShell执行空间中将数字变量的值取回来。$0为当前模块或函数传递的个数 |
@ | 临时字符串变量,有的时候为了显示的需要,先将表达式的内容赋值给临时变量@,然后再按照约定显示@的内容。 赋值语句为“@=expr”,expr为表达式 |
@1 | 预定义字符串变量,BizRunner在执行的时候,可能会导入一个显示消息的定义文件,该文件定义了与序号相对应的字符串,可通过@加上序号的方式“取出”这个定义的字符串,如@12表示取出第12号字符串的值。 |
实例
:/window[@name = "Calculator" and @classname = "ApplicationFrameWindow" ] @=$.name show
:/window[@name = "Calculator" and @classname = "ApplicationFrameWindow" ] if $$==false show 未找到控件 exit endif
~myfunc("one","two","three") ^myfunc ^/这是自定义的内部函数 ^{ show $1+" "+$2+" "+$3 ^}
@="Hello World!" show
字符串中嵌入变量值
有的时候,需要快速地组织一个字符串,FWScript提供一种便利的方法:(模仿Swift语言的做法)
使用双引号的字符串定义,在里面嵌入变量值,如下所示:
"the value of $1 is @$1"
如果$1的值为abc,则字符串为 "the value of $1 is abc"
在字符串中,如果需要显示出原始的@,则可以用 \@, @@ ,另外,只要是@后跟的字符值无法解释成变量,都会还原成@
在双引号的字符串中,可以放入各种变量值,如:@、@1、@$1、@$var、@$$ "the message of 23 is @23" "the result is @$$" 如果没有定义变量at,则"it is @$at" 中的@$at不会替换。
变量值的类型转换
有的时候,需要从字符串变量值转换成整数、浮点数或者布尔值,可使用如下方式:
代码 | 描述 |
---|---|
$Var.*I | 将字符串转变成整数类型Int,此处$var必须为字符串 |
$Var.*F | 将字符串转变成浮点数类型Float,此处$var必须为字符串 |
$Var.*B | 将字符串转变成布尔类型Bool,此处$var必须为字符串,注意系统只判断第一个字符,如果为“T”或“t”,则为True,否则为False |
$Var.*% | 将一个整数作为ascii码,变成包含对应的字符的字符串 |
$Var.*0 | 将字符串转变成 ascii码值系列,使用10进制,如“abc” 变成 “97,98,99” |
$Var.*8 | 将字符串转变成 ascii码值系列,使用8进制,如“abc” 变成 “0141,0142,0143”,也可以将一个整数变成8进制显示,如可以将97变成字符串“0141” |
$Var.*6 | 将字符串转变成 ascii码值系列,使用16进制,如“abc” 变成 “0x61,0x62,0x63”,也可以将一个整数变成16进制显示,如可以将97变成字符串“0x61” |
Example $a = "abc" show $a.*6 // 结果为0x61,0x62,0x63 $b = 98 show $b.*6 // 结果为 0x62 $c = 97 show $d.*% // 结果为 b 注意,向系统中输入字符、8进制与16进制的方法为: $a = 0141 // 凡是以0开头的数,都当作8进制进行处理 $b = %0x61 // 注意需要加个百分号 % ,为了降低语言实现的复杂度,没有实现 $b=0x61 这个功能 $c = %a $d = %\r // $c的值为a的ascii码值;$d的值为回车符的ascii码值。由于单引号' 被方文脚本用来表示@" 的功能,所以字符只能用特殊的方法实现。
<< FWScript 代码与注释 | FWScript 常量 >> |