Web 測(cè)試背景隨著 Web 技術(shù)和互聯(lián)網(wǎng)的發(fā)展,Web 應(yīng)用產(chǎn)品越來(lái)越豐富,基于 Web 頁(yè)面測(cè)試的需求與日俱增。在當(dāng)前全球軟件都在追求高效、敏捷的開(kāi)發(fā)模式的大背景下,Web 自動(dòng)化測(cè)試成為了新一波技術(shù)探討和研究的熱潮。因?yàn)閭鹘y(tǒng)的手工測(cè)試不僅效率低,并且測(cè)試質(zhì)量受限于測(cè)試人員的一些情緒和心情。若當(dāng)一個(gè)測(cè)試人員帶著煩躁情緒來(lái)測(cè)這些繁雜的大量重復(fù)性工作,測(cè)試的質(zhì)量令人擔(dān)憂。更何況,當(dāng)這項(xiàng)測(cè)試工作涉及到全球化方面的測(cè)試時(shí),多語(yǔ)言版本的測(cè)試工作導(dǎo)致該測(cè)試工作量的成倍增加,這無(wú)疑是一項(xiàng)巨大的考驗(yàn)! Sahi 的特性和優(yōu)勢(shì):當(dāng)提及面向 Web 的自動(dòng)化測(cè)試,相信許多讀者會(huì)想到或者說(shuō)使用過(guò) Selenium、Watir 等工具,而對(duì)于 Sahi 就可能比較陌生。首先,讓我們先來(lái)了解下 Sahi 工具。它是一款印度公司 Tyto Software 開(kāi)發(fā)的成熟的開(kāi)源 Web 自動(dòng)化測(cè)試工具。Sahi 簡(jiǎn)單易用,能良好支持 Ajax 和 Web2.0 技術(shù),同時(shí)適用于敏捷和傳統(tǒng)的不同測(cè)試模式。那么,它與其他非常流行的 Web 自動(dòng)化測(cè)試工具有哪些不同和優(yōu)勢(shì)呢?讓我們將其與主流自動(dòng)化測(cè)試工具 Selenium 和 Watir 來(lái)進(jìn)行一番對(duì)比,請(qǐng)參考圖 1: 圖 1. Sahi 與其他工具的對(duì)比![]() 從上圖的對(duì)比可以看出,Selenium 支持的腳本語(yǔ)言比較豐富,且自帶 Selenium IDE 自動(dòng)錄制工具,Watir 執(zhí)行的速度相對(duì)其他較快。而 Sahi 同樣具備了自帶的錄制器,且支持幾乎所有瀏覽器,且對(duì) JS 支持較好,擁有頁(yè)面等待判斷機(jī)制,內(nèi)置 Java 異常報(bào)告,支持 Ajax 等優(yōu)勢(shì)。 下面,本文將詳細(xì)介紹一下 Sahi 的幾大優(yōu)勢(shì)。 基于上下文的頁(yè)面識(shí)別機(jī)制:大多數(shù)如 Selenium 等 Web 自動(dòng)化測(cè)試工具或是自動(dòng)化框架,都采用類似基于 DOM 的定位策略、Xpath 定位策略和 id、name、identifier 等頁(yè)面元素定位策略。 Identifier 定位是最普遍的一種定位方式,當(dāng)不能識(shí)別為其它定位方式后,默認(rèn)為 identifier 定位。在這種策略下,第一個(gè)使用 id 的頁(yè)面元素將被識(shí)別出來(lái),如果沒(méi)有使用指定 id 的元素,那么將識(shí)別第一個(gè)名字與指定條件相符的元素。 例如,identifier 識(shí)別 username 元素的定位策略:identifier=username Id 定位是在知道元素具體 id 特征的情況下的一種更精確定位。例如,定位頁(yè)面元素 loginFrom:id=loginFrom name 定位方式是去識(shí)別第一個(gè)匹配名稱屬性的 UI 元素。如果多個(gè)元素?fù)碛邢嗤拿Q屬性,可以使用 value 過(guò)濾器來(lái)進(jìn)一步優(yōu)化您的定位策略。例如,定位頁(yè)面元素為 username: Xpath 定位是在 XML 中定位元素的方法,而 HTML 可以被看作是 XML 的一種實(shí)現(xiàn)。XPath 擴(kuò)展了上面 id 和 name 定位方式,提供了絕對(duì)路徑和相當(dāng)路徑兩種查找方式。 絕對(duì)路徑:html/body/div[1]/div[1]/div[3]/div[1]/form/span/input[1] 相對(duì)路徑查找://div[@id='fm']/form/span/input 然而,在實(shí)際的情況下,頁(yè)面元素并非如預(yù)期般明確。一些動(dòng)態(tài)頁(yè)面的 DOM 樹(shù)常常隨著 Web 產(chǎn)品的更新而頻繁改變。許多的元素值如 ID、Name 等在代碼中并不是必須的,常常會(huì)缺省。并且,屬性值往往不是唯一對(duì)應(yīng)的,頁(yè)面中有時(shí)會(huì)存在相同屬性的元素。當(dāng)缺省 id 值或是 Xpath 定位失效時(shí),上述這幾種查找定位方式往往顯得無(wú)助和脆弱。 Sahi 采用了一種主動(dòng)查找的機(jī)制,它不受限于特定的元素屬性。在沒(méi)有 ID、Name 值的情況下,它可以使用一些如“title,value”等屬性,這些都是頁(yè)面可見(jiàn)的屬性,所見(jiàn)即所得。同時(shí),Sahi 會(huì)通過(guò)傳入這些可見(jiàn)可識(shí)別的屬性值,來(lái)按照 Sahi 預(yù)設(shè)的機(jī)制進(jìn)行查找識(shí)別。Sahi 允許開(kāi)發(fā)者對(duì)每一種元素設(shè)置不同屬性和特定的查找順序,包括那些自定義的屬性名。所以 Sahi 相對(duì)于其他的 Web 自動(dòng)化測(cè)試工具更靈活更開(kāi)放。 比如,_link(“valueName”)用來(lái)定位一個(gè)定義為“valueName”的 link,這里的 valueName 并不一定是 value 的屬性值,也可以是它的 id、title 等。 前面提到了 Sahi 主動(dòng)查找的機(jī)制,那么它是如何去查找 DOM 節(jié)點(diǎn)下的特定元素的呢?Sahi 主要提供了三種基于上下文的元素 API:_in,_near 和_under。 從字面意思上,我們不難理解,_in 是指在某個(gè) DOM 節(jié)點(diǎn)下查找某個(gè)元素,這比 Xpath 的不管是絕對(duì)路徑或是相對(duì)路徑查找都來(lái)的靈活,不會(huì)因?yàn)?DOM 樹(shù)內(nèi)部結(jié)構(gòu)發(fā)生變化而導(dǎo)致路徑失效找不到元素的問(wèn)題。 _near 是指在某個(gè)元素附近查找相應(yīng)設(shè)定規(guī)則條件的最近一個(gè)元素,這對(duì)于一個(gè)頁(yè)面中有多個(gè)相同屬性值的情況提供了一個(gè)很好的解決方式,使查找的范圍更精確。 _under 是指在某個(gè)元素下方開(kāi)始查找,找到符合條件的最近一個(gè)元素,一般_under 都適用在具有相同偏移量的同一列中。下面,我們來(lái)看一個(gè)例子,加深對(duì) Sahi 這種基于上下文識(shí)別查找機(jī)制的理解: 圖 2. 案例網(wǎng)頁(yè)![]() 假設(shè),在圖 2 顯示的 Web 頁(yè)面的所有 text box 的 name=”q”,那么,Sahi 的偵探器通過(guò)一些標(biāo)識(shí)來(lái)鑒別它們,如(_textbox("q"), _textbox("q[1]")和_textbox("q[2]"))。 如果,我們要定位“Ruby for Rails”那一行的 text box,即_textbox("q[1]")。傳統(tǒng)的元素識(shí)別會(huì)遇到多個(gè)相同屬性元素的問(wèn)題,即使是 Xpath 的定位方式也會(huì)因?yàn)樵谒懊婕恿艘恍行碌臄?shù)據(jù)而導(dǎo)致 Xpath 定位失敗的情況。 這時(shí) Sahi 可以通過(guò)_near 這種方式來(lái)定位: _textbox("q",_near(_cell("Ruby for Rails")))當(dāng)要定位 check box 時(shí),我們又會(huì)發(fā)現(xiàn),“Ruby for Rails”這一行有“Recommend”和“Already own”兩個(gè) check box,為了更準(zhǔn)確地定位,我們可以結(jié)合_under,例如:_checkbox(0,_near(_cell("Ruby for Rails")),_under(_cell("Recommend")))。 如果在整個(gè)頁(yè)面中存在多個(gè)這樣的表格,我們還可以用_in 來(lái)進(jìn)一步縮小范圍,如:_checkbox(0,_near(_cell("Ruby for Rails")),_under(_cell("Recommend")), 同時(shí)值得一提的是,Sahi API 中的 identifier 參數(shù)都支持正則表達(dá)式,例如,_div(/name.*/) 用來(lái)識(shí)別所有以某種預(yù)屬性值是 name 開(kāi)頭的 div。 隱式頁(yè)面加載響應(yīng)等待機(jī)制:現(xiàn)在越來(lái)越多的 Web 應(yīng)用采用 Ajax 的應(yīng)用技術(shù),來(lái)支持網(wǎng)頁(yè)數(shù)據(jù)的異步請(qǐng)求響應(yīng)。當(dāng)前一般的 Web 自動(dòng)化測(cè)試工具沒(méi)有一個(gè)智能的處理機(jī)制,來(lái)判斷何時(shí)可以繼續(xù)下一個(gè)操作。像 Selenium 等自動(dòng)化測(cè)試工具通常會(huì)在腳本中人為來(lái)設(shè)定一個(gè)固定的等待時(shí)間。但這往往被證實(shí)不一定是準(zhǔn)確的。實(shí)際測(cè)試中,人是很難準(zhǔn)確判斷每一個(gè)操作請(qǐng)求需要的合理時(shí)間數(shù)值。因?yàn)椋却龝r(shí)間設(shè)置過(guò)短,下一步操作在被測(cè)應(yīng)用請(qǐng)求還未返回就執(zhí)行了,或是由于網(wǎng)絡(luò)因素使正常的響應(yīng)時(shí)間變長(zhǎng),都可能導(dǎo)致測(cè)試過(guò)程找不到相應(yīng)的頁(yè)面元素,從而導(dǎo)致整個(gè)測(cè)試用例失敗的情況。而如果把時(shí)間設(shè)置過(guò)長(zhǎng),又會(huì)造成在一些正常響應(yīng)過(guò)程中的不必要等待的時(shí)間浪費(fèi),降低了測(cè)試效率。 當(dāng)然,一些測(cè)試人員會(huì)在自動(dòng)化測(cè)試腳本中加入一些自定義的代碼。通過(guò)輪詢界面上某個(gè)指定元素,來(lái)判斷請(qǐng)求響應(yīng)是否返回,進(jìn)而決定繼續(xù)下一步操作或者是超時(shí)。但是,這樣的查找過(guò)程會(huì)導(dǎo)致整個(gè)腳本代碼變得非常臃腫,加大了開(kāi)發(fā)的成本。更何況,在一個(gè)動(dòng)態(tài)的頁(yè)面找到指定的元素本身就不是一件容易的事。 Sahi 內(nèi)置了智能的頁(yè)面等待機(jī)制,能夠自動(dòng)判斷 Ajax 請(qǐng)求是否已經(jīng)處理完畢,然后繼續(xù)下一步操作。并且,這一點(diǎn)對(duì)于用戶是“隱式”的,不需要增加額外的代碼。 Sahi 的工作原理:簡(jiǎn)單地說(shuō),用 Sahi 實(shí)現(xiàn)自動(dòng)化測(cè)試有三步,錄制,精煉腳本和回放,如下圖: 圖 3. Sahi 工作的三個(gè)主要過(guò)程![]() 如上圖 Sahi 就是先用其自帶的錄制工具,把大致的操作過(guò)程錄制下來(lái),并用 Sahi 代碼記錄下整個(gè)操作過(guò)程。隨后,將自動(dòng)生成的代碼進(jìn)一步的精煉和開(kāi)發(fā),調(diào)用一些外部 API 或編寫(xiě)特定代碼來(lái)實(shí)現(xiàn)特定的操作。最后,用 Sahi 來(lái)回放保存好的最終腳本,Sahi 就將自動(dòng)對(duì) Web 應(yīng)用進(jìn)行定義好的測(cè)試操作。 下面,本文將對(duì)這三個(gè)過(guò)程進(jìn)行詳細(xì)說(shuō)明。 第一步:錄制圖 4. Recording 過(guò)程的工作原理![]() Sahi 是通過(guò)運(yùn)行為一個(gè)代理服務(wù)器,并通過(guò)設(shè)置瀏覽器代理為 Sahi 服務(wù)器。這樣 Sahi 的腳本就能夠通過(guò) request 請(qǐng)求來(lái)注入到 JavaScript 里以訪問(wèn) Web 頁(yè)面中的元素。如圖,可以很清晰的看到,Sahi 就是 Web 瀏覽器和 Web 服務(wù)器之間的一個(gè)中間代理。 第二步:精煉腳本圖 5. Refine Script 過(guò)程的工作原理![]() 錄制的腳本都是指定元素并唯一操作的,這時(shí)就需要對(duì)代碼進(jìn)行重構(gòu),抽取出核心的功能塊,對(duì)其中的元素進(jìn)行參數(shù)化處理,以實(shí)現(xiàn)重用。這樣的數(shù)據(jù)可以從外部的 DB 或文件中讀取而來(lái)。與此同時(shí),也可調(diào)用 Sahi API 或外部 Java 等 API 實(shí)現(xiàn)特定的一些功能。 第三步:回放圖 6. Play back 過(guò)程的工作原理![]() Sahi 運(yùn)行提煉好的腳本來(lái)自動(dòng)化測(cè)試操作,并生成測(cè)試報(bào)告。 Sahi 的安裝部署與配置Sahi 雖然是 Tyto 公司的產(chǎn)品,但它的下載放在世界上最大的開(kāi)源軟件開(kāi)發(fā)網(wǎng)站 SourceForge 上,可以通過(guò)點(diǎn)擊這里下載。 圖 7. Sahi 下載![]() 默認(rèn)推薦是下載 install_sahi_xxx.jar,這是一個(gè)可執(zhí)行文件,包含了 Sahi 的安裝器和 Sahi 工具及其源代碼。當(dāng)然您也可以點(diǎn)擊上圖紅框處“Browse All Files”來(lái)選擇歷史版本和一些免安裝壓縮文件。比如,選擇只包含 Sahi 工具的 sahi_xxx.zip 文件,或者包含了 Sahi 和源代碼的免安裝壓縮包文 件sahi-src_xxx.zip。 一般建議選擇推薦的 Sahi 安裝包文件即可,這樣可以免去一些設(shè)置操作,并可以選擇是否安裝源代碼。雙擊 jar 文件進(jìn)行安裝,如圖: 圖 8. Sahi 安裝![]() 安裝過(guò)程非常簡(jiǎn)單,待安裝完成后雙擊桌面圖標(biāo)打開(kāi) Sahi 程序。打開(kāi)程序先會(huì)出現(xiàn)一個(gè) Sahi Dashboard,它能自動(dòng)開(kāi)啟 Sahi 代理服務(wù)來(lái)啟動(dòng)瀏覽器,而不需要繁瑣的代理服務(wù)器設(shè)置操作。當(dāng)然如有需要,您也可以手動(dòng)修改這些代理設(shè)置。 圖 9. Sahi Dashboard 界面![]() Sahi 會(huì)自動(dòng)去偵探您系統(tǒng)里安裝的一些瀏覽器,并在 Sahi Dashboard 上顯示出來(lái),如果發(fā)現(xiàn)有一些其他的瀏覽器未被準(zhǔn)確偵探出來(lái),您也可以點(diǎn)擊下面的“Configure”來(lái)進(jìn)行配置添加進(jìn)來(lái)。 接下來(lái),通過(guò)點(diǎn)擊 Sahi Dashboard 上的瀏覽器圖標(biāo)按鈕來(lái)啟動(dòng)相應(yīng)瀏覽器。 圖 10. Sahi 啟動(dòng) firefox 瀏覽器![]() 您可以輸入起始測(cè)試的網(wǎng)頁(yè) URL 開(kāi)始您的測(cè)試。如果測(cè)試的目標(biāo) URL 是 HTTPS 協(xié)議的,也可以點(diǎn)擊“SSL Manager”來(lái)查看和管理 SSL 證書(shū)。 圖 11. Sahi SSL 管理界面![]() 按住 Alt 鍵并雙擊頁(yè)面,將彈出 Sahi 控制窗口,如圖 12: 這個(gè)窗口相當(dāng)于 Sahi 的主控臺(tái),在這里我們可以來(lái)錄制和回放 Sahi 腳本,并編輯和管理腳本信息。 圖 12. Sahi Controller 錄制![]() 在 Record 視圖界面,輸入一個(gè)腳本名稱,點(diǎn)擊“Record”,這時(shí) Sahi 錄制器便開(kāi)始工作了。把鼠標(biāo)移到瀏覽器上的目標(biāo)網(wǎng)頁(yè)上,您的所有操作過(guò)程都將被記錄下來(lái)。您也可以自定義增加一個(gè) Assertion。按住 Ctrl 鍵,把鼠標(biāo)移動(dòng)到目標(biāo)網(wǎng)頁(yè)的任意一個(gè) HTML 元素,那么這個(gè) Accessor 會(huì)自動(dòng)出現(xiàn)在 Sahi 控制器中。這時(shí),便可以自定制對(duì)該元素的操作。常用的操作有“點(diǎn)擊”,“高亮”,“賦值等。同時(shí),您可以通過(guò)“Append to Script”按鈕來(lái)加到腳本代碼中。錄制完成后按“Stop”來(lái)結(jié)束整個(gè)過(guò)程。 圖 13. Sahi 自動(dòng)生成腳本精煉![]() 圖 13 是一個(gè)簡(jiǎn)單的 Sahi 自動(dòng)錄制過(guò)程得到的 Sahi 腳本代碼。其大致過(guò)程為:通過(guò)百度搜索“sahi”關(guān)鍵字,校驗(yàn) Sahi 官網(wǎng)的 assert 是否存在,點(diǎn)擊進(jìn)入 Sahi 官網(wǎng)后繼續(xù)校驗(yàn) assert“Community Forums”,點(diǎn)擊進(jìn)入。通過(guò)前一節(jié)“Sahi Controller 錄制”來(lái)完成這個(gè)操作過(guò)程,那么,您可以在默認(rèn)目錄“C:\Users\IBM_ADMIN\sahi\userdata\scripts”中找到先前命名為“Test_sahi”的腳本文件,我們可以將這段代碼進(jìn)行一個(gè)精煉和豐富的過(guò)程,比如在點(diǎn)擊“Community Forums”鏈接前將它進(jìn)行高亮操作: _popup("Sahi Web Test Automation Tool")_highlight(_link("Community Forums"));或者您想在 Sahi 腳本代碼中調(diào)用內(nèi)置的 Java 類,例如: functionprintThroughJava(s){
java.lang.System.out.println("Through Java: "+s);}
printThroughJava("Hi there");“Through Java: Hi there”將在 sahi 的命令行中輸出。 圖 14. Sahi Controller 回放![]() 回放的時(shí)候,只需要在 Sahi 控制臺(tái)上切換到“Playback”tab 頁(yè)面,找到腳本存放的路徑,下面就有開(kāi)始、暫停和結(jié)束等按鈕來(lái)進(jìn)行操作。需要注意的是,開(kāi)始以前必須給它設(shè)置一個(gè)“Stat URL”否則無(wú)法回放腳本。腳本回放的時(shí)候,在“Statements”里可以看到腳本運(yùn)行的日志,比如操作步驟和一些錯(cuò)誤信息等。 通過(guò)點(diǎn)擊右下角的“View Logs”可以查看詳細(xì)的 Sahi 運(yùn)行日志報(bào)告: 圖 15. Sahi 日志報(bào)告![]() 由圖可見(jiàn),這樣自動(dòng)錄制生成的腳本代碼都是 Sahi 代碼,我們可以在實(shí)際的 Java 項(xiàng)目中調(diào)用這些 Sahi 代碼,以實(shí)現(xiàn)重用。其實(shí),我們可以通過(guò)打開(kāi) sahi/config/sahi.properties 文件將其中屬性設(shè)置為 controller.mode=java 來(lái)實(shí)現(xiàn)自動(dòng)錄制腳本的語(yǔ)言為 Java。值得注意的是,改為 Java 語(yǔ)言錄制后的 Sahi 控制器和原來(lái)有所不同,它的界面更簡(jiǎn)潔,功能也更簡(jiǎn)單一些,沒(méi)有了自動(dòng)回放功能。因?yàn)椋@更多是為了自動(dòng)生成一些簡(jiǎn)單的腳本,來(lái)提高開(kāi)發(fā)人員的開(kāi)發(fā)效率。 Sahi 的語(yǔ)法與示例應(yīng)用Sahi 腳本是基于 JavaScript 的,而 Sahi 腳本是通過(guò)代理解析的,并能夠在 rhino JavaScript 引擎中有效執(zhí)行的。除了變量前的強(qiáng)制符$,它和 JavaScript 基本很像。 Sahi 操作的代碼聲明是一句以分號(hào)結(jié)尾的普通代碼行,如: _click(_link("Login"));變量聲明: var$variableName =value; 或者先聲明再賦值: var$variableName;// declaration $variableName =value;// assignment 所有的變量都是以$符號(hào)開(kāi)頭的,關(guān)鍵字 var 用于局部變量,如: var$username ="SahiTestUser"; var$password;// declaration; $password =$username +"_password";// "SahiTestUser_password" 函數(shù)聲明: // function
declarationfunctionlogin($usr,$pwd){
_click(_link("Login"));
_setValue(_textbox("username"),$usr);
_setValue(_password("password"),$pwd);
_click(_submit("Login"));
}
// function call
login("sahi_user","secret");在一個(gè) Sahi 代碼文件中可以通過(guò)_include來(lái)包含調(diào)用其他 Sahi 文件,如: _include("includes/common_functions.sah");由上面的語(yǔ)法可知,Sahi 是由下劃線開(kāi)頭,帶上操作或 HTML 元素,非常簡(jiǎn)單,清晰易懂,這些 API 基本都是能夠看字面就能理解它的功能。 Sahi 的 API 主要可以分為 3 類:瀏覽器訪問(wèn) API、瀏覽器操作 API和混合 API。 瀏覽器訪問(wèn) API:用于訪問(wèn)瀏覽器上的元素,并通過(guò)代理來(lái)注入這些 API 到瀏覽器中去。 瀏覽器操作 API:主要來(lái)執(zhí)行一些如點(diǎn)擊、輸入數(shù)據(jù)等操作,并在瀏覽器上聲明這些元素的。 混合 API:是既能在瀏覽器又能在代理上用于處理異常和操作文件和數(shù)據(jù)庫(kù)的。 由于 Sahi 對(duì)網(wǎng)頁(yè)的訪問(wèn)方法的 API 很多,大家可以參考官方 API 文檔進(jìn)行學(xué)習(xí)。 由上可知,Sahi 腳本都是很直接的聲明和操作過(guò)程,在一個(gè)運(yùn)行的代理上,由 Sahi Dashboard 來(lái)管理執(zhí)行。如果我們希望能夠?qū)⑽覀兊?Sahi 自動(dòng)執(zhí)行的過(guò)程與我們其他的項(xiàng)目功能模塊進(jìn)行集成,那么把這些腳本轉(zhuǎn)換成 Java 代碼,又能用獨(dú)立運(yùn)行,是一件兩全其美的事。 接下來(lái),本文將介紹一個(gè)用 Sahi Java Driver 來(lái)編寫(xiě) Sahi 自動(dòng)化腳本實(shí)現(xiàn) Web 自動(dòng)化測(cè)試的簡(jiǎn)單案例。 首先,將 Sahi 的開(kāi)發(fā)庫(kù)包文件 sahi.jar 加入到 Java 項(xiàng)目中,該文件位于 Sahi 安裝路徑下..\sahi\lib\下,接下來(lái)就可以參考 Sahi 的 Java API 來(lái)開(kāi)發(fā)自動(dòng)化測(cè)試腳本。下面是一個(gè)簡(jiǎn)單的案例腳本: 清單 1. 導(dǎo)入 Sahi 類包import net.sf.sahi.client.Browser; import net.sf.sahi.config.Configuration; 設(shè)置 sahi 安裝路徑和 userdata 路徑 清單 2. 配置 Sahi 代理String sahiBase = "C:/Users/ADMIN/sahi/"; String userDataDirectory = "C:/Users/ADMIN/sahi/userdata"; Configuration.initJava(sahiBase, userDataDirectory); 您可以設(shè)置任意一種瀏覽器類型,也可以在 sahi/userdata/config/browser_types.xml 文件中自己創(chuàng)建定義 清單 3. 配置瀏覽器并啟動(dòng)String browserType = "firefox"; Browser browser = new Browser(browserType); browser.open(); 清單 4. 操作代碼示例browser.navigateTo("http:///demo/training/");
browser.textbox("user").setValue("test");
browser.password("password").setValue("secret");
browser.submit("Login").click();
browser.textbox("q").setValue("2");
browser.textbox("q[1]").setValue("9");
browser.textbox("q[2]").setValue("4");
browser.button("Add").click();
System.out.println(":: browser.textbox(\"total\").value()=" + browser.需要注意一點(diǎn),除了 Firefox 瀏覽器,其他的瀏覽器都必須進(jìn)行服務(wù)器代理配置,并在運(yùn)行腳本前打開(kāi) Sahi 代理服務(wù)。 實(shí)際測(cè)試結(jié)果表明,Sahi 代碼簡(jiǎn)介,運(yùn)行輕巧快速,而且它還能與外置的一些模塊集成完成發(fā)送郵件,讀取 PDF 文件等操作,功能非常完善。 結(jié)束語(yǔ)綜上所述,本文從當(dāng)前 Web 自動(dòng)化測(cè)試的困境出發(fā),通過(guò)與其他開(kāi)源 Web 自動(dòng)化測(cè)試進(jìn)行對(duì)比,介紹了 Sahi 的特性和優(yōu)勢(shì)。主要從基于上下文頁(yè)面識(shí)別機(jī)制和智能頁(yè)面加載響應(yīng)等待機(jī)制兩方面進(jìn)行闡述。同時(shí),詳細(xì)介紹了 Sahi 的工作原理以及如何安裝部署進(jìn)行自動(dòng)化測(cè)試開(kāi)發(fā)的過(guò)程??傊琒ahi 提供了一套在多瀏覽器和多編程語(yǔ)言的開(kāi)源自動(dòng)化測(cè)試方案,解決了當(dāng)前一些頁(yè)面元素難找,頁(yè)面響應(yīng)不同步而導(dǎo)致測(cè)試失敗的問(wèn)題。Sahi 是一個(gè)能夠快速部署,易于開(kāi)發(fā)并且功能強(qiáng)大的開(kāi)源 Web 自動(dòng)化測(cè)試工具。由于篇幅所限,本文不能對(duì) Sahi 所有的功能進(jìn)行一一闡述,希望有興趣的朋友一起研究探討。 |
|
|