qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請(qǐng)?jiān)L問(wèn) http://qaseven.github.io/

          QTP——使用DOM識(shí)別樹(shù)形節(jié)點(diǎn)進(jìn)行Web測(cè)試

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

            QTP在對(duì)樹(shù)形結(jié)構(gòu)的節(jié)點(diǎn)進(jìn)行識(shí)別時(shí),可以采用DOM(Document Object Model文檔對(duì)象模型)模型,在DOM中,每個(gè)網(wǎng)頁(yè)元素都對(duì)應(yīng)著一個(gè)對(duì)象。樹(shù)結(jié)構(gòu)中每一個(gè)元素都被稱(chēng)為一個(gè)節(jié)點(diǎn)。QTP可以通過(guò)DOM來(lái)訪問(wèn)HTML標(biāo)簽。在QTP中,訪問(wèn)DOM主要通過(guò)使用page測(cè)試對(duì)象的object屬性來(lái)進(jìn)一步訪問(wèn)。

            舉個(gè)簡(jiǎn)單的例子:在百度貼吧首頁(yè),我們需要獲得”熱門(mén)轉(zhuǎn)帖排行”下的標(biāo)題。

            代碼如下:

          '獲得貼吧首頁(yè)熱門(mén)轉(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="熱門(mén)轉(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)題儲(chǔ)存到Datatable中
                Next
              End If
            Next
          Set oBj=Nothing
          Set oDIV=Nothing

            在這段代碼中,就是通過(guò)訪問(wèn)貼吧頁(yè)面下的WebTable對(duì)象的Object屬性來(lái)進(jìn)一步訪問(wèn)HTML標(biāo)簽的。

          我們用到了幾個(gè)方法和屬性:

            getElementsByTagName()方法:返回帶有指定標(biāo)簽名的對(duì)象的集合。
            NextSibling屬性:返回處于同級(jí)節(jié)點(diǎn)下某個(gè)元素之后緊跟的元素。
            ChildNodes屬性:返回指定節(jié)點(diǎn)的子節(jié)點(diǎn)的節(jié)點(diǎn)列表。

            我們借助于IEDevToolBar,可以發(fā)現(xiàn),“熱門(mén)轉(zhuǎn)帖排行”這一列中,“熱門(mén)轉(zhuǎn)帖排行”是DIV的innertext,而底下的標(biāo)題則分別是UL的innertext,因此要訪問(wèn)到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)的類(lèi)型,1為元素,2為屬性,3為文本,8注釋?zhuān)?文檔
            Nodename:返回節(jié)點(diǎn)的名稱(chēng),元素返回的是標(biāo)簽名稱(chēng),屬性返回的是屬性名稱(chēng),文本返回的是#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測(cè)試時(shí),將會(huì)很有益處。

          posted on 2011-10-21 16:34 順其自然EVO 閱讀(1135) 評(píng)論(0)  編輯  收藏

          <2011年10月>
          2526272829301
          2345678
          9101112131415
          16171819202122
          23242526272829
          303112345

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(55)

          隨筆分類(lèi)

          隨筆檔案

          文章分類(lèi)

          文章檔案

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 东乡族自治县| 乐业县| 社会| 子洲县| 仁怀市| 巴彦县| 临夏市| 南通市| 双流县| 冀州市| 溧阳市| 闽侯县| 富顺县| 保康县| 美姑县| 枣阳市| 辰溪县| 蒙山县| 贵溪市| 无为县| 山西省| 韩城市| 隆德县| 桂阳县| 岑溪市| 吉林市| 克拉玛依市| 西昌市| 鱼台县| 湘西| 安康市| 睢宁县| 云阳县| 长海县| 韩城市| 顺义区| 西青区| 正蓝旗| 婺源县| 舞阳县| 陆河县|