Sahi (1) —— 快速入门(101 Tutorial)


jvm版本: 1.8.0_65

sahi版本: Sahi Pro 6.1.0

参考来源:

Sahi官网

[Sahi Quick Tutorial](http://sahipro.com/docs/using-sahi/quick-tutorial.html#Download Sahi Pro)

要求

Sahi运行需要Java 1.5 或更高版本

下载

从官网下载Sahi Pro需要注册获取30天的试用期。目前Sahi貌似已不在提供社区版。

  1. install_sahi_pro_v610_20150617.jar

安装

双击“install_sahi_pro_xxx.jar”然后运行安装包

或命令行运行

  1. java -jar install_sahi_pro_xxx.jar

*注意,需要将Sahi安装到目录没有空格的路径下,否则Chrome可能会出错。
河蟹

我们支持正版,想延长试用期的童鞋私聊。

启动Sahi

Sahi Dashboard自动启动Sahi代理,并且可以启动配置好的浏览器。

启动Sahi Dashboard有三种方式:

  1. 双击桌面图标

  2. 通过Windows启动菜单运行

  3. 命令行

    • Windows

      • 进入目录 '''<sahi_root>\userdata\bin''' 然后运行 '''start_dashboard.bat'''
    • Linux/Mac

      • 进入目录 '''<sahi_root>/userdata/bin''' 然后运行 '''./start_dashboard.sh'''

录制Sahi脚本

  1. 以Firefox为例,点击Sahi Dashboard上的浏览器图标,我们可以看到Sahi的会为我们启动它的一个首页

  1. 在新的窗口打开“Sahi Controller”

  2. 在"Sahi Controller"上打开选项卡“Record”

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

  2. 点击“Sample Application”

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

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

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

断言

一个脚本通常包括网页上的操作以及功能验证,Sahi可以在录制脚本的过程中增加断言,来实现验证。

为总价加一个断言:

  1. 将鼠标移至页面html元素上,然后按住CRTL键

    1. 如果是Mac系统,应用程序窗体需要在focus状态下接受鼠标的事件。
  2. “Accessor”字段会出现在Controller上,在这个例子中,我们将鼠标悬浮在“Grand Total”字段上

  3. 点击“Assert”按钮,为元素生成断言

  4. 这些断言会在“Evaluate Expression”中看到

  5. 点击“Test-->” 验证断言是否为真

  6. 一旦断言为真,点击“Append to Script”将断言加入脚本

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

  2. 在Controller上点击“Stop”完成录制

回放

  1. 输入刚才录制好的脚本文件名称到“File: ”字段下

  2. 输入测试的开始地址

    1. http://sahitest.com/demo/training/login.htm
  3. 点击“Play”按钮

脚本中的步骤会被执行,Controller也会在“Statement”里面输出执行的结果,一旦执行完毕,会在底部出现“SUCCSESS”或者“FAILURE”的字样。

*注意:Controller可以随时关闭,不会影响回放。

查看日志

修改脚本

  1. /* --Objects Definitions Above-- */
  2. function login($user, $password){
  3. _setValue(_textbox("user"), $user);
  4. _setValue(_password("password"), $password);
  5. _click(_submit("Login"));
  6. }
  7. function addBooks($qJava, $qRuby, $qPython){
  8. _setValue(_textbox("q"), $qJava);
  9. _setValue(_textbox("q[1]"), $qRuby);
  10. _setValue(_textbox("q[2]"), $qPython);
  11. _click(_button("Add"));
  12. }
  13. function verifyTotal($total){
  14. _assertExists(_textbox("total"));
  15. _assert(_isVisible(_textbox("total")));
  16. _assertEqual($total, _getValue(_textbox("total")));
  17. }
  18. function logout(){
  19. _click(_button("Logout"));
  20. }
  21. /* --Functions Above-- */
  22. _navigateTo("http://sahi.co.in/demo/training/");
  23. login("test", "secret");
  24. addBooks("2", "3", "1");
  25. verifyTotal("1550");
  26. logout();

first_script_lib.sah

  1. function login($user, $password){
  2. _setValue(_textbox("user"), $user);
  3. _setValue(_password("password"), $password);
  4. _click(_submit("Login"));
  5. }
  6. function addBooks($qJava, $qRuby, $qPython){
  7. _setValue(_textbox("q"), $qJava);
  8. _setValue(_textbox("q[1]"), $qRuby);
  9. _setValue(_textbox("q[2]"), $qPython);
  10. _click(_button("Add"));
  11. }
  12. function verifyTotal($total){
  13. _assertExists(_textbox("total"));
  14. _assert(_isVisible(_textbox("total")));
  15. _assertEqual($total, _getValue(_textbox("total")));
  16. }
  17. function logout(){
  18. _click(_button("Logout"));
  19. }

first_script.sah

  1. _include("first_script_lib.sah");
  2. _navigateTo("http://sahi.co.in/demo/training/");
  3. login("test", "secret");
  4. addBooks("2", "3", "1");
  5. verifyTotal("1550");
  6. logout();

命令行使用

  1. $ ./testrunner.sh first_script.sah http://sahitest.com/demo/training/ firefox

测试套件

invalid_login.sah

  1. _setValue(_textbox("user"), "test");
  2. _setValue(_password("password"), "badpassword");
  3. _click(_submit("Login"));
  4. _assert(_isVisible(_div("errorMessage")));
  5. _assertEqual("Invalid username or password", _getText(_div("errorMessage")));

tutorial.suite

  1. first_script.sah
  2. invalid_login.sah

命令行运行

  1. $ ./testrunner.sh tutorial.suite http://sahitest.com/demo/training/ chrome

执行结果

结束

Sahi (1) —— 快速入门(101 Tutorial)的更多相关文章

  1. BIML 101 - ETL数据清洗 系列 - BIML 快速入门教程 - 连接数据库执行SQL语句

    BIML 101 - BIML 快速入门教程 第一节 连接数据库执行SQL语句 本小节将用BIML建一个简单的可以执行的包. 新建一个biml文件,贴入下面的代码 1 <Biml xmlns=& ...

  2. BIML 101 - ETL数据清洗 系列 - BIML 快速入门教程 - 序

    BIML 101 - BIML 快速入门教程 做大数据的项目,最花时间的就是数据清洗. 没有一个相对可靠的数据,数据分析就是无木之舟,无水之源. 如果你已经进了ETL这个坑,而且预算有限,并且有大量的 ...

  3. WPF/MVVM Quick Start Tutorial - WPF/MVVM 快速入门教程 -原文,翻译及一点自己的补充

    转载自 https://www.codeproject.com/articles/165368/wpf-mvvm-quick-start-tutorial WPF/MVVM Quick Start T ...

  4. JMeter (3) —— JMeter录制脚本并压力测试用户登陆场景以CAS SSO为例(101 Tutorial)

    JMeter (3) -- JMeter录制脚本并压力测试用户登陆场景以CAS SSO为例(101 Tutorial) 主要内容 JMeter录制脚本并进行压力测试用户登陆场景,并以CAS SSO单点 ...

  5. AngularJS 30分钟快速入门【译】

    引用自:http://www.revillweb.com/tutorials/angularjs-in-30-minutes-angularjs-tutorial/,翻译如下: 简介 我三年前开始使用 ...

  6. [你必须知道的NOSQL系列]专题二:Redis快速入门

    一.前言 在前一篇博文介绍了MongoDB基本操作,本来打算这篇博文继续介绍MongoDB的相关内容的,例如索引,主从备份等内容的,但是发现这些内容都可以通过官方文档都可以看到,并且都非常详细,所以这 ...

  7. Html与CSS快速入门02-HTML基础应用

    这部分是html细节知识的学习. 快速入门系列--HTML-01简介 快速入门系列--HTML-02基础元素 快速入门系列--HTML-03高级元素和布局 快速入门系列--HTML-04进阶概念 示例 ...

  8. 基于PHP的cURL快速入门

    cURL 是一个利用URL语法规定来传输文件和数据的工具,支持很多协议,如HTTP.FTP.TELNET等.最爽的是,PHP也支持 cURL 库.本文将介绍 cURL 的一些高级特性,以及在PHP中如 ...

  9. (转)基于PHP的cURL快速入门

    1. 原文:基于PHP的cURL快速入门 英文原文:http://net.tutsplus.com/tutorial ... for-mastering-curl/ 原文作者:Burak Guzel ...

随机推荐

  1. 探索MVP(Model-View-Presenter)设计模式在SharePoint平台下的实现

    对于SharePoint Developers来说,往往会过多的去关注SharePoint平台和工具,而把设计模式和代码的可测试性放在了一个较低的优先级.这并不是说SharePoint Develop ...

  2. Ubuntu 添加安装字体

    Ubuntu的美化当然少不了漂亮字体的支持,我有时会code一下,所以喜欢adobe的 source code pro(开源),安装步骤如下: (注:如果想导入的字体是一个单ttf文件的,可以直接双击 ...

  3. U8客开插件-一、标准单据标准按钮执行前验证操作

    今天要做的就是在标准的单据的标准按钮之前进行验证操作,如果验证通过执行保存,如果不通过给予提示不进行保存. 下面拿销售出库单的保存按钮进行举例: 第一步:在程序中 ctrl+Shift  点击保存之后 ...

  4. mysql中and 和 or 联合使用

    以下是两张表,我只列出有用的字段. Table:student_score 学生成绩 sid(学生ID) cid(课程ID) score(分数) 5 1 50 5 2 110 5 3 64 5 4 n ...

  5. 【剑道】步法(Ashi Sabaki)

    转自 http://www.openkendo.com/class7.html 步法(Ashi Sabaki)可能算是剑道中最重要的部分.,以下大致做一归纳讲解,希望能够帮助到各位新人的练习. “折足 ...

  6. MySQL 自带工具使用介绍

    MySQL 数据库不仅提供了数据库的服务器端应用程序,同时还提供了大量的客户端工具程序,如mysql,mysqladmin,mysqldump 等等,都是大家所熟悉的.虽然有些人对这些工具的功能都已经 ...

  7. [LintCode] Subarray Sum & Subarray Sum II

    Subarray Sum Given an integer array, find a subarray where the sum of numbers is zero. Your code sho ...

  8. c++中浮点数精度设置

    1.包含头文件<iomanip>,附注manip是manipulator,操控的简写. 2.第一种写法: cout<<setiosflags(ios::); 第二种写法: co ...

  9. Atitti cto的日常流程与职责attilax总结

    Atitti cto的日常流程与职责attilax总结 1. (最重要)技术战略制定 规划,预测趋势1 1.1. 关键词 Throught技术雷达 趋势 没落  已死  辉煌 未来1 1.2. (比较 ...

  10. 菜鸟学Java(八)——dom4j详解之读取XML文件

    dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的.dom4j是一个非常非常优秀的Java XML API,具有性能优异.功能强大和极端易用使用的特点,同时它也是一个开放源 ...