您的位置:軟件測(cè)試 > 開源軟件測(cè)試 > 開源功能測(cè)試工具 > Selenium
Selenium 1.0的歷史及工作原理
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時(shí)間:[ 2014/2/26 10:19:45 ] 推薦標(biāo)簽:Selenium 項(xiàng)目 系統(tǒng)

當(dāng)你看到這篇文章時(shí)一定會(huì)詫異,2.0都廣泛使用了,為何還要了解1.0的內(nèi)容呢?1.0的確已經(jīng)慢慢的成為歷史,那我們先通過(guò)歷史來(lái)認(rèn)識(shí)一下selenium的發(fā)展吧。

Jason Huggins在2004年發(fā)起了Selenium項(xiàng)目,當(dāng)時(shí)他在ThoughtWorks公司開發(fā)內(nèi)部的時(shí)間和費(fèi)用(Time and Expenses)系統(tǒng),該應(yīng)用使用了大量的JavaScript。雖然IE在當(dāng)時(shí)是主流瀏覽器,但是ThoughtWorks還使用一些其他瀏覽器(特別是Mozilla系列),當(dāng)員工在自己的瀏覽器中無(wú)法正常運(yùn)行T&E系統(tǒng)時(shí)會(huì)提交bug。當(dāng)時(shí)的開源測(cè)試工具要么關(guān)注單一瀏覽器(通常是IE),要么是模擬瀏覽器(如HttpUnit),而購(gòu)買商業(yè)工具授權(quán)的成本會(huì)耗盡這個(gè)小型內(nèi)部項(xiàng)目的有限預(yù)算,所以它們都不太可行。

幸運(yùn)的是,所有被測(cè)試的瀏覽器都支持Javascript。Jason和他所在的團(tuán)隊(duì)有理由采用Javascript編寫一種測(cè)試工具來(lái)驗(yàn)證應(yīng)用的行為。他們受到FIT(Framework for Integrated Test)的啟發(fā),使用基于表格的語(yǔ)法替代了原始的Javascript,這種做法支持那些編程經(jīng)驗(yàn)有限的人在HTML文件中使用關(guān)鍵字驅(qū)動(dòng)的方式來(lái)編寫測(cè)試。該工具,初稱為“Selenium”,后來(lái)稱為“Selenium Core”,在2004年基于Apache 2授權(quán)發(fā)布。

Selenium的表格格式類似于FIT的ActionFixture。表格的每一行分為三列。第一列給出了要執(zhí)行的命令名稱,第二列通常包含元素標(biāo)記符,第三列包含一個(gè)可選值。例如,如下格式表示了如何在名稱為“q”的元素中輸入字符串“Selenium”:

type name=q Selenium

因?yàn)镾elenium過(guò)去使用純JavaScript編寫,它的初設(shè)計(jì)要求開發(fā)人員把準(zhǔn)備測(cè)試的應(yīng)用和Selenium Core、測(cè)試腳本部署到同一臺(tái)服務(wù)器上以避免觸犯瀏覽器的安全規(guī)則和JavaScript沙箱策略。在實(shí)際開發(fā)中,這種要求并不總是可行。更糟的是,雖然開發(fā)人員的IDE能夠幫助他們快速處理代碼和瀏覽龐大的代碼庫(kù),但是沒(méi)有針對(duì)HTML的相關(guān)工具。人們很快意識(shí)到維護(hù)一個(gè)中等規(guī)模的測(cè)試集是笨拙而痛苦的過(guò)程。

為了解決這個(gè)問(wèn)題和其他問(wèn)題,他們編寫了HTTP代理,這樣所有的HTTP請(qǐng)求都會(huì)被Selenium截獲。使用代理可以繞過(guò)“同源”規(guī)則(瀏覽器不支持Javascript調(diào)用任何當(dāng)前頁(yè)面所在服務(wù)器以外的其他任何東西)的許多限制,從而緩解了首要弱點(diǎn)。這種設(shè)計(jì)使得采用多種語(yǔ)言編寫Selenium成為可能:它們只需把HTTP請(qǐng)求發(fā)送到特定URL。連接方法基于Selenium Core的表格語(yǔ)法嚴(yán)格建模,稱之為“Selenese”。因?yàn)檎Z(yǔ)言綁定在遠(yuǎn)程控制瀏覽器,所以該工具稱為“Selenium Remote Control”或者“Selenium RC”。

在Selenium處于開發(fā)階段的同時(shí),另一款瀏覽

器自動(dòng)化框架WebDriver也正在ThoughtWorks公司的醞釀之中。Selenium2.0之webdriver的介紹請(qǐng)期待下一篇文章。

上面介紹中其實(shí)也提到了1.0的概況,下圖是它的工作流程。

1. 測(cè)試用例通過(guò)Http請(qǐng)求建立與 selenium-RC server 的連接

2. Selenium RC Server 驅(qū)動(dòng)一個(gè)瀏覽器,把Selenium Core加載入瀏覽器頁(yè)面當(dāng)中,并把瀏覽器的代理設(shè)置為Selenium Server的Http Proxy

3. 執(zhí)行用例向Selenium Server發(fā)送Http請(qǐng)求,Selenium Server對(duì)請(qǐng)求進(jìn)行解析,然后通過(guò)Http Proxy發(fā)送JS命令通知Selenium Core執(zhí)行操作瀏覽器的動(dòng)作并注入 JS 代碼

4.Selenium Core執(zhí)行接受到的指令并操作

5. 當(dāng)瀏覽器收到新的請(qǐng)求時(shí),發(fā)送http請(qǐng)求

6. Selenium Server接收到瀏覽器發(fā)送的Http請(qǐng)求后,自己重組Http請(qǐng)求,獲取對(duì)應(yīng)的Web頁(yè)面

7. Selenium Server中的Http Proxy把接受到的頁(yè)面返回給瀏覽器。

同源策略,它是由Netscape提出的一個(gè)的安全策略,現(xiàn)在所有的可支持javascript的瀏覽器都會(huì)使用這個(gè)策略。所謂同源,是指域名、協(xié)議、端口相同。所以,打開一個(gè)baidu的網(wǎng)頁(yè)只能執(zhí)行baidu下的JavaScript腳本,而另外一個(gè)tab是google,baidu下的JavaScript則不能執(zhí)行,從而防止對(duì)本網(wǎng)頁(yè)的非法篡改。

那么Selenium RC通過(guò)http代理的方式很好的解決了同源策略并欺騙了瀏覽器。

軟件測(cè)試工具 | 聯(lián)系我們 | 投訴建議 | 誠(chéng)聘英才 | 申請(qǐng)使用列表 | 網(wǎng)站地圖
滬ICP備07036474 2003-2017 版權(quán)所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd