qtp樹形結構複選框的父節點節點的引數化選擇?

自動化測試過程中,經常遇到樹形結構的需要進行勾選資料的情況,如使用者管理功能選擇組織機構,資料維護時選擇車間等等。如下圖中所示結構,本例中所示案例即為實現選擇父級節點自動選中其子節點的方法(關於僅選擇一個子節點的方法請參考上一篇文章)。

qtp樹形結構複選框的父節點節點的引數化選擇

方法/步驟

若是樹形結構頁面各元素是寫在一個Table中,這種情況就比較好處理,直接使用childItem進行取數即可,當樹形結構資料識別出來是Element時,每個Webcheckbox均被識別為Element,且每個複選框僅Index值不同,若想實現引數化,每次可以指定節點進行勾選就不能使用qtp封裝函數了。此時我們可以使用dom來實現複選框的引數化選擇。

qtp樹形結構複選框的父節點節點的引數化選擇

如下圖中我們可以將資料寫在dataTable中,每次執行指令碼時,從dataTable中選擇節點名稱進行選擇。

qtp樹形結構複選框的父節點節點的引數化選擇

首先我們可以按F12鍵來開啟除錯工具,在此工具中可以檢視到html文字文件資訊,觀察文字檔案的一些樹形以便於我們操作。選中選擇要素按鈕,去點選要檢視的複選框屬性。可以檢視到非選中狀態,該class值為“tree-checkbox tree-checkbox0”,此時我們再選種一個勾選狀態的檢視class值為“tree-checkbox tree-checkbox1”。並且該div節點的下一個節點就是其子節點。此時實現方式就很明顯了,我們只要找到該節點名稱的所有下級節點,並將其class值改為“tree-checkbox tree-checkbox1”,就可以實現選中功能了。

qtp樹形結構複選框的父節點節點的引數化選擇

原始碼如下:set obj=Browser("中科恆運Bug管理系統").Page("中科恆運Bug管理系統").Frame("選擇成員列表頁").object '建立object物件Set oDiv=obj.getElementsByTagName("div") '查詢帶有div的節點,並存在陣列oDiv中Set oSpan=obj.getElementsByTagName("span") '查詢帶有span的節點,並存在陣列oSpan中'以下程式碼用於獲得選擇的父級節點的所有下級節點的innertext值,並進行處理 For i = 0 To oDiv.length-1 If oDiv(i).innertext=dataTable.Value("專案人員") Then sa=replace(oDiv(i).NextSibling.innertext,Chr(13)&Chr(10),",") '得到父節點的所有子節點的innertext值。因得到的各子節點的值使用回車及空格鍵進行了分割,需首先去除,用逗號代替 array2=Split(sa,",")'拆分得到的各子節點的值,得到各子節點的名稱存到陣列array2中 Hcount=UBound(array2)'得陣列array2的上標 Lcount=LBound(array2) '得到陣列array2的下標 End If next '以下程式碼獲得所有oSpan陣列中與array2陣列名稱相同的節點並將其上級節點的class值進行修改 For m = 0 To oSpan.length-1 For j = Lcount To Hcount If array2(j)<>"" and array2(j)=oSpan(m).innertext Then oSpan(m).previousSibling.setAttribute "class","tree-checkbox tree-checkbox1" End If Next Next

qtp樹形結構複選框的父節點節點的引數化選擇

執行上述程式碼效果如下兩圖,可見該程式碼實現的為將選擇的節點的所有下幾個級別的節點均選中。

qtp樹形結構複選框的父節點節點的引數化選擇

實現思路:首先觀察父級節點的所有下級節點都在div裡,我們要做的是獲取所有下級節點的innertext值,並將其處理後存到陣列中。span節點中儲存了每個子節點的innertext值,及節點名稱。那我們我們只要找到所有的span中innertext與該父級節點的子節點相同的節點,並修改其上一個節點的class值即可實現此功能

相關問題答案