軟件測(cè)試 | web跟蹤元素屬性
問題
元素屬性可以被樣式表或JavaScript動(dòng)態(tài)更改。測(cè)試高度動(dòng)態(tài)的Web應(yīng)用需要使用更加強(qiáng)大、靈活的方法來(lái)跟蹤元素屬性。無(wú)論多深入的靜態(tài)信息,通常都不足以用于測(cè)試由JavaScript事件驅(qū)動(dòng)的Web應(yīng)用。
解決方案
一旦找到你希望長(zhǎng)時(shí)間跟蹤的元素,請(qǐng)?jiān)贒OM面板中找出它的id或其他標(biāo)識(shí)屬性(如果它沒有id,你可以為它創(chuàng)建一個(gè),請(qǐng)參考3.9節(jié),然后,打開Firebug中的控制臺(tái)面板)。
在下面的例子中,我們將演示如何跟蹤現(xiàn)有元素中一切新添加的內(nèi)容。向現(xiàn)有元素添加內(nèi)容正是許多AJAX驅(qū)動(dòng)應(yīng)用實(shí)時(shí)更新的工作原理。
首先,找到并記住你希望跟蹤的元素:
接著,創(chuàng)建一個(gè)函數(shù)來(lái)顯示你希望探測(cè)的元素屬性:
為所有可能更改這個(gè)屬性的事件添加一個(gè)事件監(jiān)聽程序:
初始化這個(gè)事件(通過應(yīng)用邏輯或手動(dòng)方式):
在http://oreilly.com的某頁(yè)面上運(yùn)行這些步驟,我們獲得了圖3-16所示的結(jié)果。

討論
本秘訣只有在你擁有JavaScript驅(qū)動(dòng)的應(yīng)用時(shí)才真正有用,并且需要對(duì)JavaScript非常熟悉。它可能不適合你的應(yīng)用。不過,對(duì)于許多啟用AJAX的網(wǎng)站來(lái)說(shuō),JavaScript事件的結(jié)果是由服務(wù)器而不是客戶端來(lái)決定。這種方法仍然是測(cè)試這種事件驅(qū)動(dòng)的站點(diǎn)的主要工具之一。而且,如果它能夠幫助你調(diào)試AJAX代碼,那么也能夠幫助基于AJAX的攻擊。
這是一種相當(dāng)靈活的方法。無(wú)論是事件類型還是測(cè)試輸出,都有許多的選項(xiàng)。例如,在運(yùn)行許多這樣的事件監(jiān)聽程序時(shí),你可能更愿意創(chuàng)建一個(gè)調(diào)試輸出區(qū),并將文本附加到該結(jié)點(diǎn)。例如:
在非常復(fù)雜的應(yīng)用中,可能有許多動(dòng)作綁定到許多節(jié)點(diǎn)上。JavaScript支持每個(gè)結(jié)點(diǎn)對(duì)應(yīng)不限數(shù)量的事件監(jiān)聽程序。同樣也有許多類型的事件。所有的Firefox事件都可以在以下網(wǎng)址找到:http://www.xulplanet.com/references/elemref/ref_EventHandlers.html。
如果對(duì)于你的Web應(yīng)用來(lái)說(shuō),沒用必要編寫自己的事件監(jiān)聽程序,那么Firebug也包含了一個(gè)非常好的JavaScript調(diào)試器,它能夠查看并記錄特定的函數(shù)調(diào)用,還能夠設(shè)置斷電。
當(dāng)心哪些啟動(dòng)其他AJAX請(qǐng)求和(通過eval()函數(shù))運(yùn)行評(píng)估代碼的動(dòng)態(tài)JavaScript函數(shù)。如果你的Web應(yīng)用評(píng)估是從服務(wù)器接收到的內(nèi)容,那么它可能特別容易受到JavaScript注入攻擊。這一點(diǎn)甚至也適用于僅僅載入數(shù)據(jù)的情況,比如由客戶端進(jìn)行評(píng)估的JavaScript對(duì)象符號(hào)(JSON)數(shù)據(jù)。