Hello,
i'm trying to verify value in webtable.it's dynamic and row index changes based on the inputs and type of the input. what i'm trying to do is capture the subtotal in cell. so i could get the total from the returned row and given columnindex. i've three subtotals section. i want to capture the row index from the first subtotal row but , my code always returns the last subtotal's row index. how can i capture the very first subtotal row index. any help would be highly appreciated.
please see my below code
Set objTxt=MainPage.FindChild(Array("ObjectType","contentText"),Array("Cell","Sub Total"),100,true)
i=0
Do While Not (objTxt.Exists)And i<5
aqUtils.Delay(1000)
Set objTxt=MainPage.FindChild(Array("ObjectType","contentText"),Array("Cell","Sub Total),100,true)
i=i+1
Loop
If (objTxt.Exists) Then 'get the rowIndex
intRwIndex=aqObject.GetPropertyValue(objTxt,"RowIndex")
End IF
Solved! Go to Solution.
Hi,
The best, fastest and most reliable solution is to talk to Development and ask them to provide unique and stable identifiers for all UI elements that your test code needs to work with.
If this is not an option, then you still may try .FindAllChildren() and use the fact that the first subtotal section will be the last element of the returned array. This is not documented, but this is how .FindAllChildren() and .FindChild() work for more then decade since their implementation.
Hi,
Not sure I got the question...
The code seems to be fine...
To get the first UI object just use the last found one:
Set myObject = arrobjects(UBound(arrobjects)) ' last found object corresponds to the first UI one
What I am missing?
Thanks a lot Alex,,, it works just fine,,,,,,,,,,,,,,,,,, i'm able to use capture the desired row and use that row to capture the amount. I really appreciate your help. Cheers!
Move your if then logic inside your loop, do your "exists" check and, if it returns true, set your intRwIndex variable to the object row index (You can just do intRwIndex = objTxt.RowIndex, need need to GetPropertyValue), and then Exit the loop with an "Exit For" statement. I'm not VERY good at VB Script, but this is how I think it should look:
Set objTxt=MainPage.FindChild(Array("ObjectType","contentText"),Array("Cell","Sub Total"),100,true) i=0 Do While Not (objTxt.Exists)And i<5 aqUtils.Delay(1000) Set objTxt=MainPage.FindChild(Array("ObjectType","contentText"),Array("Cell","Sub Total),100,true) If (objTxt.Exists) Then 'get the rowIndex intRwIndex=objTxt.RowIndex Exit For End IF i=i+1 Loop
thanks, but for some reason it starts from the buttom. and returns me the last rowindex number for the subtotal. is there a way to use index number or something
Set objTxt=MainPage.FindChild(Array("ObjectType","contentText"),Array("Cell","Sub Total"),100,true)
If (objTxt.Exists) Then 'get the rowIndex
intRwIndex=objTxt.RowIndex
msgbox intRwIndex
End IF
thanks
That's FindChild. The results from FindChild always start at the bottom.
Suggestion... rather than doing your search from the MainPage... what if you mapped the Table itself (you're looking for Cells, there has to be a table. You can Alias it down to simply MainPage.MyTable if you want to.
With that, you could just do a for-loop through the table... that will do a top down. Something like this (JavaScript, sorry... I'm not a VB guy). The assumption below is that the column index for the "Sub-Total" is 2... you can change that to whatever you want.
var myObject; var intRowIndex; for (var i; i < Aliases.MainPage.MyTable.RowCount -1, i++){ if (Aliases.MainPage.MyTable.Cell(i, 2).contentText == 'Sub-Total'){ myObject = Aliases.MainPage.myTable.Cell(i,2); intRowIndex = i; break; } }
thank you so much, sounds like i plan, i'll try it and let you know how it goes. have a nice weekend.
Hi,
Also, instead of .FindChild() you may try .FindAllChildren() which will return you and array of found cells. Then you may iterate through the array and sum subtotals to get the grand total.
Hi,
The best, fastest and most reliable solution is to talk to Development and ask them to provide unique and stable identifiers for all UI elements that your test code needs to work with.
If this is not an option, then you still may try .FindAllChildren() and use the fact that the first subtotal section will be the last element of the returned array. This is not documented, but this is how .FindAllChildren() and .FindChild() work for more then decade since their implementation.
Hi Alex,
thanks for your suggestion. actually we use a vendor product, don't have access to the developers.
actually i am able to find all in an array, now how can i use it. need to capture the last returned rowindex number,,, not sure how can capture it so i can use that to grab the value , please see the code
Sub FindRwIndex
Dim myObject,rwIndex
Set mytable =Aliases.browser.Page.MyPremTable
arrobjects=mytable.FindAllChildren("contentText","Sub Total")
for arrCount=0 To UBound(arrobjects)
If arrobjects(arrCount).contentText="Sub Total" Then
'Set myObject=arrobjects(arrCount)
rwIndex=arrobjects(arrCount).RowIndex
Log.Message rwIndex
End If
Next
End Sub
Hi,
Not sure I got the question...
The code seems to be fine...
To get the first UI object just use the last found one:
Set myObject = arrobjects(UBound(arrobjects)) ' last found object corresponds to the first UI one
What I am missing?
Subject | Author | Latest Post |
---|---|---|