Sahi (1) —— 快速入門(101 Tutorial)
jvm版本: 1.8.0_65
sahi版本: Sahi Pro 6.1.0
參考來源:
要求
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
- 進入目錄 '''
\userdata\bin''' 然後執行 '''start_dashboard.bat'''
- 進入目錄 '''
- Linux/Mac
- 進入目錄 '''
/userdata/bin''' 然後執行 '''./start_dashboard.sh'''
- 進入目錄 '''
- Windows
錄製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
執行結果