|
本帖最后由 lifr 于 2012-4-6 21:03 编辑
回复 12# db_qtp
看得出你QTP经验和编程经验都不太多. 经验多少没有关系, 关键是解决问题的思路要清晰.
你的代码的有一个问题是一个函数要解决的问题太多, 结果把好多东西都混杂在一起. 出错了都不知道在哪里出错.
我给你一个思路
1. 定位要操作的table
通过QTP的对象spy找出此table, 然后用"column names"属性来定位此table
2. 把数据从table里提取出来
从你的要求来看, 保存Table里的数据使用 Dictionary数据结构, key是column name, value是一个Array. 其中Array的值是所有行在此column的cell的值.
也就是像下面的样子
{column => [value1, value2, ...]
注意: 没有必要用DataTable. 除非有把此数据持久化保存的要求, 否则不用DataTable.
3. 对其中的某一个column, 验证sort功能
首先对Dictionary中此column对应的Array进行排序, 这个是expected result.
对页面上Table中的column排序(click on head?), 把column的值提取出来(调用step2的函数), 这个是actual result.
比较expected result和actual result.
具体的操作, 给你一段代码参考.
- ' get text from a cell.
- '
- ' @return value of input box if in cell is an input box
- Function GUI_Table_GetCellText(objTbl, rowIdx, colIdx)
- idx = 0
- strVal = Empty
- Do
- Set ele = objTbl.ChildItem(rowIdx, colIdx, "WebElement", idx)
- If ele is Nothing Then Exit Do End If
- If ele.getROProperty("html tag") = "INPUT" Then
- strVal = ele.getROProperty("Value") ' editable param table
- Exit Do
- ' first visiable SPAN
- ElseIf ele.getROProperty("html tag") = "SPAN" And LCase(ele.object.style.display)<>"none" Then
- strVal = ele.getROProperty("innertext") ' cell with span
- Exit Do
- Else
- ' Not ok
- End If
- idx = idx + 1
- Loop
- If IsEmpty(strVal) Then
- strVal = objTbl.GetCellData(rowIdx, colIdx) 'plain cell
- End If
- GUI_Table_GetCellText = Trim(strVal)
- End Function
- ' read table content into [{rowIdx=1; key1=val1; ..}, ...]
- '
- ' Note a special key "rowIdx" added for each row
- Function GUI_Table_Read(tbl)
-
- Dim itemAry()
- ReDim itemAry(tbl.RowCount - 2)
- colAry = split(tbl.getROProperty("column names"), ";")
- For rowIdx=2 To tbl.RowCount
- Set rowMap = CreateObject("Scripting.Dictionary")
- For i=0 to UBound(colAry)
- colName = colAry(i)
- colIdx = i+1
- celVal = GUI_Table_GetCellText(tbl, rowIdx, colIdx)
- rowMap.Add Trim(colName), Trim(celVal)
- Next
- rowMap.Add "rowIdx", rowIdx
- Set itemAry(rowIdx-2) = rowMap
- Set rowMap = Nothing
- Next
-
- GUI_Table_Read = itemAry
- End Function
复制代码 |
|