在Web測試中,不可避免的會遇到樹形節(jié)點(diǎn)的識別。如下就是通過IEDevToolBar抓下的一個(gè)page的樹形結(jié)構(gòu)。

QTP在對樹形結(jié)構(gòu)的節(jié)點(diǎn)進(jìn)行識別時(shí),可以采用DOM(Document Object Model文檔對象模型)模型,在DOM中,每個(gè)網(wǎng)頁元素都對應(yīng)著一個(gè)對象。樹結(jié)構(gòu)中每一個(gè)元素都被稱為一個(gè)節(jié)點(diǎn)。QTP可以通過DOM來訪問HTML標(biāo)簽。在QTP中,訪問DOM主要通過使用page測試對象的object屬性來進(jìn)一步訪問。
舉個(gè)簡單的例子:在百度貼吧首頁,我們需要獲得”熱門轉(zhuǎn)帖排行”下的標(biāo)題。
代碼如下:
'獲得貼吧首頁熱門轉(zhuǎn)帖排行下的所有標(biāo)題 Set oBj=Browser("貼吧").Page("貼吧page").WebTable("Table").Object Set oDIV= oBj.getElementsByTagName("DIV") num=0 For i=0 to oDIV.length-1 If oDIV(i).innertext="熱門轉(zhuǎn)貼排行" then For j=0 to oDIV(i).NextSibling.ChildNodes.length-1 num=num+1 Datatable.SetCurrentRow(num) Datatable.Value("innertext")=oDIV(i).NextSibling.ChildNodes(j).innertext '將獲得的標(biāo)題儲存到Datatable中 Next End If Next Set oBj=Nothing Set oDIV=Nothing |
在這段代碼中,就是通過訪問貼吧頁面下的WebTable對象的Object屬性來進(jìn)一步訪問HTML標(biāo)簽的。
我們用到了幾個(gè)方法和屬性:
getElementsByTagName()方法:返回帶有指定標(biāo)簽名的對象的集合。
NextSibling屬性:返回處于同級節(jié)點(diǎn)下某個(gè)元素之后緊跟的元素。
ChildNodes屬性:返回指定節(jié)點(diǎn)的子節(jié)點(diǎn)的節(jié)點(diǎn)列表。
我們借助于IEDevToolBar,可以發(fā)現(xiàn),“熱門轉(zhuǎn)帖排行”這一列中,“熱門轉(zhuǎn)帖排行”是DIV的innertext,而底下的標(biāo)題則分別是UL的innertext,因此要訪問到UL的節(jié)點(diǎn)列表,就需要用到NextSibling屬性。

最后程序運(yùn)行的結(jié)果在Report的Run-Time Data Table中:

DOM還有很多方法和屬性,之前提到了NextSibling,那么還有PreviouSibling;以及NodeName,NodeType,NodeValue等等。
關(guān)于NodeName,NodeType,NodeValue;很多人可能還有很多混淆,這里做些總結(jié):
Nodetype:返回節(jié)點(diǎn)的類型,1為元素,2為屬性,3為文本,8注釋,9文檔
Nodename:返回節(jié)點(diǎn)的名稱,元素返回的是標(biāo)簽名稱,屬性返回的是屬性名稱,文本返回的是#text(innertext),文檔返回的是#document
Nodevalue:返回當(dāng)前節(jié)點(diǎn)的值,文本節(jié)點(diǎn)返回文本值,屬性節(jié)點(diǎn)返回屬性值,標(biāo)簽和文檔節(jié)點(diǎn)返回null
其他的一些方法和屬性待大家自己學(xué)習(xí)DOM后了解。如果大家熟悉DOM的方法和屬性,在利用QTP做Web測試時(shí),將會很有益處。