SecureCrt脚本函数(一)
SecureCrt脚本
自动化
测试
JS脚本
引言
- Crt脚本的实现需要使用Crt定义好的各个对象的属性和方法来实现,脚本函数系列将逐一介绍Crt脚本中最常使用的对象,对这些对象以层级关系画出,本篇首先介绍顶级对象crt的属性和方法。属性是一个静态的对象,方法是具体执行的动作。属相和方法底下还可以有子属性和子方法,这个其实就和面向对象的编程方式很像,有些基础的人应该会很快掌握。
前言
在学习脚本函数前,先说说在脚本中头两行(必须写在头两行,且最好不要有空格回车之类的字符)所必须添加的标识,这两行标识告诉Crt当前执行的脚本需要使用什么解释器进行解释。其中language为语言,现支持Jscript、VBScript、Python、Perl,interface为接口,现在都是1.0,以下为示例,修改对应的语言即可:
- JS
- # $language = "JScript"
- # $interface = "1.0"
- Python
- # $language = "Python"
- # $interface = "1.0"
顶级对象‘crt‘的子属性和方法
属性 方法
Dialog GetActiveTab
Screen GetScriptTab
ScriptFullName GetTabCount
Session GetTab
Version Quit
Window Sleep
属性
Dialog
解释 定义了一个Dialog(对话框),通过这个对象,可以通过调用该对象的子属性和方法实现对话框的相关功能。
脚本实现
- JS
var diaObj = crt.Dialog;
- Python
diaObj = crt.Dialog;
Screen
解释 定义Screen(屏幕)对象,该对象是整个脚本中的灵魂,包含数据抓取、数据发送、等待数据等等重要功能都是有该对象的子属性和方法实现的。
后面会介绍该对象的属性和方法,可以作为重点关注。
脚本实现
- JS
var scrObj = crt.Screen;
- Python
scrObj = crt.Dialog;
ScriptFullName
解释 该对象返回当前执行脚本的全名,其中包含脚本路径和脚本名,可以使用中文路径和文件名。
该属性没有子属性和方法。
脚本实现
- JS
var scrName = crt.ScriptFullName;
- Python
scrName = crt.ScriptFullName;
Session
解释 定义当前会话属性,该属性有许多很实用的属性和方法可以使用。
同样作为后重点关注
脚本实现
- JS
var sessionObj = crt.Session;
- Python
sessionObj = crt.Session;
Version
解释 返回当前Crt的软件版本,通常该属性用于比较版本新旧,以处理在不同版本上不能兼容的问题。
脚本实现
- JS
- // 检查Crt版本,如果低于7.3,则退出Crt。
- var crtVer = crt.Version;
- if ( crtVer < 7.3 ) {
- crt.Quit();
- }
- Python
- # 检查Crt版本,如果低于7.3,则退出Crt。
- crtVer = crt.Version;
- if ( crtVer < 7.3 ) {
- crt.Quit();
- }
Window
解释 返回当前程序的窗口对象,该对象下有子对象,可以实现诸如隐藏当前窗口等的功能。
脚本实现
- JS
var crtWin = crt.Window;
- Python
crtWin = crt.Window;
方法
GetActiveTab()
解释 Crt软件的管理是多Tab的,该方法返回当前活跃状态的Tab界面,该界面作为一个新的Tab属性使用,而Tab属性本身又有许多子属性和方法,因此该方法也是比较实用的一个函数。
脚本实现
- JS
var actTab = crt.GetActiveTab();
- Python
actTab = crt.GetActiveTab();
GetScriptTab()
解释 获取当前脚本执行的Tab对象,该对象有一些子对象和方法,通过获取Tab页面,可以轻松的实现在多个Tab中同时发送数据的功能。
脚本实现
- JS
- // 获取当前脚本执行的Tab,并获取编号(Index从1开始)
- var scriptTab = crt.GetActiveTab();
- var tabNum = scriptTab.Index;
- // 在当前Tab上发送数据
- scriptTab.Screen.Send("脚本执行的Tab是:"+tabNum);
- Python
- # 获取当前脚本执行的Tab,并获取编号(Index从1开始)
- scriptTab = crt.GetActiveTab();
- tabNum = scriptTab.Index;
- # 在当前Tab上发送数据
- scriptTab.Screen.Send("脚本执行的Tab是:"+tabNum);
GetTabCount()
解释 获取当前总Tab数目,是一个数值类型返回值
脚本实现
- JS
- // 获取总Tab数目
- var tabCount = crt.GetTabCount();
- Python
- # 获取总Tab数目
- tabCount = crt.GetTabCount();
GetTab(Index)
解释 获取某个位置的Tab对象,该位置即为tab的Index,从1开始,即从当前Crt窗口的最左侧Tab数起。
脚本实现
- JS
- // 获取指定编号的Tab对象
- var tabCount = crt.GetTabCount();
- var gTab = "";
- // 从Tab1到所有Tab依次发送数据
- for ( var i = 1 ; i <= tabCount; i++ ) {
- gTab = crt.GetTab(i);
- gTab.Screen.Send("当前Tab为:"+i);
- }
- Python
- # 获取指定编号的Tab对象
- tabCount = crt.GetTabCount();
- gTab = "";
- # 从Tab1到所有Tab依次发送数据
- for ( i in range(tabCount+1) ) {
- gTab = crt.GetTab(i);
- gTab.Screen.Send("当前Tab为:"+i);
- }
Sleep(millisec)
解释 脚本暂停运行时间,millisec:毫秒
该功能是极为常用的功能
脚本实现
- JS
- // 获取指定编号的Tab对象
- var tabCount = crt.GetTabCount();
- var gTab = "";
- // 从Tab1到所有Tab依次发送数据
- for ( var i = 1 ; i <= tabCount; i++ ) {
- gTab = crt.GetTab(i);
- // 暂停5秒再发送数据
- crt.Sleep(5000);
- gTab.Screen.Send("当前Tab为:"+i);
- }
- Python
- # 获取指定编号的Tab对象
- tabCount = crt.GetTabCount();
- gTab = "";
- # 从Tab1到所有Tab依次发送数据
- for ( i in range(tabCount+1) ) {
- gTab = crt.GetTab(i);
- # 暂停5秒再发送数据
- crt.Sleep(5000);
- gTab.Screen.Send("当前Tab为:"+i);
- }
Quit()
解释 退出Crt软件。(不是退出脚本,是直接退出软件。)
脚本实现
- JS
- // 如果直接使用crt.Quit的话只要有会话是激活的,那么就会有弹窗出来,因此,可以使用for循环,先将所有Tab断连,再退出。
- // 断连所有Tab
- var tabCount = crt.GetTabCount();
- var gTab = "";
- for ( var i = 1 ; i <= tabCount; i++ ) {
- gTab = crt.GetTab(i);
- gTab.Session.Disconnect();
- }
- // 此时可以直接退出Crt
- crt.Quit()
- Python
- // 如果直接使用crt.Quit的话只要有会话是激活的,那么就会有弹窗出来,因此,可以使用for循环,先将所有Tab断连,再退出。
- // 断连所有Tab
- tabCount = crt.GetTabCount();
- gTab = "";
- for ( i in range(tabCount+1) ) {
- gTab = crt.GetTab(i);
- gTab.Session.Disconnect();
- }
总结
1. 在写脚本时一定要添加前言所述的脚本头部两行,且注意最好不要有空格和回车等。
2. crt的最常用最基本的二级属性和方法上面都已经介绍完了,总的一个应用原则是属性是静态的,在使用时不需要加(),而方法是动态的(实际上就是函数),因此在调用时需要用(),有些方法是有参数,有些是没有的,在使用时也要注意。
3. 希望通过本篇对二级属性和方法做一个全面的讲解,可以更清楚的知道crt函数中都有哪些具体的函数,哪些可能是重点,哪些可能最常用,以及如何使用这些函数,都可以根据上面的解释和脚本实现中获取相关信息。
4.但凡有子属性或子方法的二级属性和方法,都可以通过后面教程中的写法直接引入,不需要每次都赋值给一个对象使用。
5.希望各位看官可以从中学到些东西,本篇抛砖引玉就到此结束了。下一篇将会就二级属性‘Dialog‘做详细说明,敬请期待...