Sahi (1) —— 快速入门(101 Tutorial)
Sahi (1) —— 快速入门(101 Tutorial)
jvm版本: 1.8.0_65
sahi版本: Sahi Pro 6.1.0
参考来源:
[Sahi Quick Tutorial](http://sahipro.com/docs/using-sahi/quick-tutorial.html#Download Sahi Pro)
要求
Sahi运行需要Java 1.5 或更高版本
下载
从官网下载Sahi Pro需要注册获取30天的试用期。目前Sahi貌似已不在提供社区版。
install_sahi_pro_v610_20150617.jar
安装
双击“install_sahi_pro_xxx.jar”然后运行安装包
或命令行运行
java -jar install_sahi_pro_xxx.jar

*注意,需要将Sahi安装到目录没有空格的路径下,否则Chrome可能会出错。
河蟹
我们支持正版,想延长试用期的童鞋私聊。
启动Sahi
Sahi Dashboard自动启动Sahi代理,并且可以启动配置好的浏览器。

启动Sahi Dashboard有三种方式:
双击桌面图标
通过Windows启动菜单运行
命令行
Windows
- 进入目录 '''<sahi_root>\userdata\bin''' 然后运行 '''start_dashboard.bat'''
Linux/Mac
- 进入目录 '''<sahi_root>/userdata/bin''' 然后运行 '''./start_dashboard.sh'''
录制Sahi脚本
- 以Firefox为例,点击Sahi Dashboard上的浏览器图标,我们可以看到Sahi的会为我们启动它的一个首页

在新的窗口打开“Sahi Controller”
在"Sahi Controller"上打开选项卡“Record”

在“Script Name:”处填上 first_script.sah,然后点击“Record”
点击“Sample Application”

打开Sahi的示例程序后,输入用户名“test”和密码“secret”,然后点击“Login”按钮登陆

最后一步的记录可在“Evaluate Expression”中查看

登陆后是一个购物车,添加数量2,3,1然后点击“Add”按钮,底部会计算出总价。

断言
一个脚本通常包括网页上的操作以及功能验证,Sahi可以在录制脚本的过程中增加断言,来实现验证。
为总价加一个断言:
将鼠标移至页面html元素上,然后按住CRTL键
如果是Mac系统,应用程序窗体需要在focus状态下接受鼠标的事件。
“Accessor”字段会出现在Controller上,在这个例子中,我们将鼠标悬浮在“Grand Total”字段上
点击“Assert”按钮,为元素生成断言
这些断言会在“Evaluate Expression”中看到
点击“Test-->” 验证断言是否为真
一旦断言为真,点击“Append to Script”将断言加入脚本

用“Evaluate Expression”和“Test-->”可以执行任何javascript脚本,在Controller上的操作不会被录下,只有页面上的直接操作才会被记录。
点击“登出”
在Controller上点击“Stop”完成录制
回放

输入刚才录制好的脚本文件名称到“File: ”字段下
输入测试的开始地址
http://sahitest.com/demo/training/login.htm
点击“Play”按钮
脚本中的步骤会被执行,Controller也会在“Statement”里面输出执行的结果,一旦执行完毕,会在底部出现“SUCCSESS”或者“FAILURE”的字样。
*注意:Controller可以随时关闭,不会影响回放。
查看日志




修改脚本

/* --Objects Definitions Above-- */
function login($user, $password){
_setValue(_textbox("user"), $user);
_setValue(_password("password"), $password);
_click(_submit("Login"));
}
function addBooks($qJava, $qRuby, $qPython){
_setValue(_textbox("q"), $qJava);
_setValue(_textbox("q[1]"), $qRuby);
_setValue(_textbox("q[2]"), $qPython);
_click(_button("Add"));
}
function verifyTotal($total){
_assertExists(_textbox("total"));
_assert(_isVisible(_textbox("total")));
_assertEqual($total, _getValue(_textbox("total")));
}
function logout(){
_click(_button("Logout"));
}
/* --Functions Above-- */
_navigateTo("http://sahi.co.in/demo/training/");
login("test", "secret");
addBooks("2", "3", "1");
verifyTotal("1550");
logout();
first_script_lib.sah
function login($user, $password){
_setValue(_textbox("user"), $user);
_setValue(_password("password"), $password);
_click(_submit("Login"));
}
function addBooks($qJava, $qRuby, $qPython){
_setValue(_textbox("q"), $qJava);
_setValue(_textbox("q[1]"), $qRuby);
_setValue(_textbox("q[2]"), $qPython);
_click(_button("Add"));
}
function verifyTotal($total){
_assertExists(_textbox("total"));
_assert(_isVisible(_textbox("total")));
_assertEqual($total, _getValue(_textbox("total")));
}
function logout(){
_click(_button("Logout"));
}
first_script.sah
_include("first_script_lib.sah");
_navigateTo("http://sahi.co.in/demo/training/");
login("test", "secret");
addBooks("2", "3", "1");
verifyTotal("1550");
logout();
命令行使用
$ ./testrunner.sh first_script.sah http://sahitest.com/demo/training/ firefox

测试套件
invalid_login.sah
_setValue(_textbox("user"), "test");
_setValue(_password("password"), "badpassword");
_click(_submit("Login"));
_assert(_isVisible(_div("errorMessage")));
_assertEqual("Invalid username or password", _getText(_div("errorMessage")));
tutorial.suite
first_script.sah
invalid_login.sah
命令行运行
$ ./testrunner.sh tutorial.suite http://sahitest.com/demo/training/ chrome
执行结果

结束
Sahi (1) —— 快速入门(101 Tutorial)的更多相关文章
- BIML 101 - ETL数据清洗 系列 - BIML 快速入门教程 - 连接数据库执行SQL语句
BIML 101 - BIML 快速入门教程 第一节 连接数据库执行SQL语句 本小节将用BIML建一个简单的可以执行的包. 新建一个biml文件,贴入下面的代码 1 <Biml xmlns=& ...
- BIML 101 - ETL数据清洗 系列 - BIML 快速入门教程 - 序
BIML 101 - BIML 快速入门教程 做大数据的项目,最花时间的就是数据清洗. 没有一个相对可靠的数据,数据分析就是无木之舟,无水之源. 如果你已经进了ETL这个坑,而且预算有限,并且有大量的 ...
- WPF/MVVM Quick Start Tutorial - WPF/MVVM 快速入门教程 -原文,翻译及一点自己的补充
转载自 https://www.codeproject.com/articles/165368/wpf-mvvm-quick-start-tutorial WPF/MVVM Quick Start T ...
- JMeter (3) —— JMeter录制脚本并压力测试用户登陆场景以CAS SSO为例(101 Tutorial)
JMeter (3) -- JMeter录制脚本并压力测试用户登陆场景以CAS SSO为例(101 Tutorial) 主要内容 JMeter录制脚本并进行压力测试用户登陆场景,并以CAS SSO单点 ...
- AngularJS 30分钟快速入门【译】
引用自:http://www.revillweb.com/tutorials/angularjs-in-30-minutes-angularjs-tutorial/,翻译如下: 简介 我三年前开始使用 ...
- [你必须知道的NOSQL系列]专题二:Redis快速入门
一.前言 在前一篇博文介绍了MongoDB基本操作,本来打算这篇博文继续介绍MongoDB的相关内容的,例如索引,主从备份等内容的,但是发现这些内容都可以通过官方文档都可以看到,并且都非常详细,所以这 ...
- Html与CSS快速入门02-HTML基础应用
这部分是html细节知识的学习. 快速入门系列--HTML-01简介 快速入门系列--HTML-02基础元素 快速入门系列--HTML-03高级元素和布局 快速入门系列--HTML-04进阶概念 示例 ...
- 基于PHP的cURL快速入门
cURL 是一个利用URL语法规定来传输文件和数据的工具,支持很多协议,如HTTP.FTP.TELNET等.最爽的是,PHP也支持 cURL 库.本文将介绍 cURL 的一些高级特性,以及在PHP中如 ...
- (转)基于PHP的cURL快速入门
1. 原文:基于PHP的cURL快速入门 英文原文:http://net.tutsplus.com/tutorial ... for-mastering-curl/ 原文作者:Burak Guzel ...
随机推荐
- 第一篇:初识ASP.NET控件开发_第二节:HelloWorld
1)步骤一:新建类库项目:Controls,创建新解决方案:CustomLibrary 2)步骤二:在类库项目中添加“ASP.NET服务器控件”新建项:RenderHelloWorld.cs (也可以 ...
- 如何在open xml excel 中存储自定义xml数据?
如何在open xml excel 中存储自定义xml数据? 而且不能放在隐藏的cell单元格内,也不能放在隐藏的sheet内,要类似web网站的Application变量,但还不能是VBA和宏之类的 ...
- MetInfo PHP的CMS,目测还不错
MetInfo PHP的CMS,目测还不错,先记录下来
- processing fill()和stroke()函数
在procesiing有两个基本的函数,fill()和stroke()函数,这两个函数分别用来控制形状填充颜色和形状轮廓的颜色,fill()和stroke()可以接受的参数的个数为1,2,3.当参数的 ...
- C++生成斐波拉其数列
该方法作为一种演示功能左右,运行较慢. #include <iostream> using namespace std; class Fibonacci{ public: int a, b ...
- android 的build.gradle 的API手册
问题:对于用gradle的来配置java的开发者都能在GRADLE_HOME/docs/dsl找到如何对其build.gradle文件的具体属性. 但是对于开发android的开发者就不能对于官方的& ...
- IOS开发----生成静态库(.a)
由于iPhone控件的极度匮乏和自定义组件在重用上的限制,在过去的项目中我们积累了大量的“纯代码”组件——因为IB本身的限制,我们无法把这些组件封装为IB组件库(本来我们想通过分发xib文件的方式重用 ...
- Python 的并发编程
这篇文章将讲解 Python 并发编程的基本操作.并发和并行是对孪生兄弟,概念经常混淆.并发是指能够多任务处理,并行则是是能够同时多任务处理.Erlang 之父 Joe Armstrong 有一张非常 ...
- 菜鸟学SSH(五)——Struts2上传文件
上传文件在一个系统当中是一个很常用的功能,也是一个比较重要的功能.今天我们就一起来学习一下Struts2如何上传文件. 今天讲的上传文件的方式有三种: 1,以字节为单位传输文件: 2,Struts2封 ...
- 安装mysql提示3306端口已经被占用解决方案
今天遇到的问题是这样的,之前已经安装过mysql了,一直用的好好的,但是今天开启服务时报异常,无法启动.为了省事,于是想到卸载重装,在安装的过程中发现3306已经被占用,这也是一开始服务无法启动的原因 ...