您的位置:軟件測試 > 開源軟件測試 > 開源功能測試工具 > Selenium
Selenium 2.0的由來及設(shè)計(jì)架構(gòu)
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時(shí)間:[ 2014/2/7 15:43:22 ] 推薦標(biāo)簽:Selenium 開源 功能測試工具 WebDriver

命令處理器的執(zhí)行方法通過查找“name”來決定調(diào)用哪個(gè)方法,然后做什么。第一個(gè)參數(shù)是一個(gè)“響應(yīng)”對(duì)象(這么叫是因?yàn)槌踔皇怯糜趯㈨憫?yīng)發(fā)回給用戶),它封裝的不只是可能發(fā)送的值;還有一個(gè)方法,使要調(diào)度的響應(yīng)返回給用戶以及可以找出有關(guān)DOM的實(shí)現(xiàn)機(jī)制。第二個(gè)參數(shù)是上面參數(shù)對(duì)象的值(在這里是Id和name)。這個(gè)方案的優(yōu)點(diǎn)是每個(gè)函數(shù)都有一個(gè)統(tǒng)一的接口,反映了在客戶端上使用的結(jié)構(gòu),這意味著用來思考每一端的代碼的心理模式是相似的。這是getAttribute的底層實(shí)現(xiàn),在之前也看到過:

FirefoxDriver.prototype.getElementAttribute = function(respond, parameters) {

  var element = Utils.getElementAt(parameters.id,

       respond.session.getDocument());

  var attributeName = parameters.name;

  respond.value = webdriver.element.getAttribute(element, attributeName);

  respond.send();

};

為了使元素引用一致,第一行是在緩存中通過不透明的ID查找被引用的元素。在Firefox driver中,那個(gè)ID是一個(gè)通用識(shí)別碼,cache是一個(gè)map。這個(gè)getElementAt方法還檢查元素是否已知并且附加到DOM上,如果檢查失敗,ID則從緩存中移除并拋異常返回給用戶。

第二行之前討論過的是利用瀏覽器自動(dòng)化原子,這時(shí)候編譯為一個(gè)單個(gè)腳本并加載為擴(kuò)展的一部分。后一行調(diào)用了send方法,做了個(gè)簡單的檢查,確保在調(diào)用執(zhí)行方法的回調(diào)前一次只發(fā)一個(gè)響應(yīng)。該響應(yīng)是以JSON字符串裝到對(duì)象里的形式發(fā)回給用戶(假設(shè)getAttribute返回7,意思是沒有發(fā)現(xiàn)元素)。

{

  'value': '7',

  'status': 0,

  'sessionId': 'XXX'

}

然后Java客戶端檢查狀態(tài)的值,如果該值非零,把數(shù)字狀態(tài)碼轉(zhuǎn)換成正確類型的異常拋出來,使用“value”字段設(shè)置發(fā)送給用戶的消息,如果狀態(tài)為零“value”字段的值直接返回給用戶。

大部分能行的通,但是有一位聰明的讀者提出個(gè)問題:在調(diào)用執(zhí)行方法之前為什么調(diào)度器把對(duì)象轉(zhuǎn)換成一個(gè)字符串?

這樣做的原因是Firefox driver還支持純javascript編寫的測試腳本。通常情況下,這是件非常難以實(shí)現(xiàn)的事情:測試都是在瀏覽器的Javascript安全沙盒中運(yùn)行,因此可能不會(huì)做一系列對(duì)測試有用的事情,如在不同域之間切換或上傳文件等。但是,Webdriver的Firefox擴(kuò)展提供了一個(gè)解決辦法,屬性添加到文檔元素上以證明它的存在。Webdriver的Javascript API使用它作為一項(xiàng)指標(biāo),它可以添加JSON序列化的命令對(duì)象作為文檔元素的命令屬性的值,觸發(fā)一個(gè)自定義的webdriverCommand事件,然后在被通知響應(yīng)已確定的相同元素上監(jiān)聽webdriverResponse事件。

這表明在一個(gè)裝有Webdriver擴(kuò)展的firefox版本里瀏覽網(wǎng)頁是一個(gè)壞點(diǎn)子,因?yàn)樗蛊渌诉h(yuǎn)程控制瀏覽器變得更容易。

在后臺(tái)有一個(gè)DOM消息器,等待webdriverCommand讀取序列化的JSON對(duì)象并調(diào)用命令處理器的執(zhí)行方法。這次,回調(diào)是在文檔元素上設(shè)置了響應(yīng)屬性,然后觸發(fā)預(yù)期的webdriverResponse事件。

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