Right now I use the UltraUIaTree.GetChildren() coded ui function to find out how many rows are in the WinGrid in my WinForms Application. The problem is that this will return extra rows such as the Band header the summationRow and an addrow (an extra three columns). Therefore when I want to find out how many rows there are using the getchildren method I have to do GetChildren().Count - 3. However, I don't always have an add row so I can't always assume there are three rows there.
Is there a way to get just the count on the dataRows only through Coded UI (no bandHeader/SummationRow/AddRow)?
I have tried using the Nodes property but that didn't seem to return anything.
Hello Jeremy,
There are two articles in MSDN, regarding thrid party controls accessibility, please take a look at them:
http://blogs.msdn.com/b/visualstudioalm/archive/2011/10/28/coded-ui-test-extension-for-3rd-party-windows-forms-controls-how-to.aspx
http://blogs.msdn.com/b/visualstudioalm/archive/2011/10/28/coded-ui-test-extension-for-3rd-party-controls-the-basics-explained.aspx.
I wanted to know if you were able to solve your issue based on these suggestions or you still need help. Please let me know.
Well I am not really sure what Chris is talking about but it seems like he wants me to loop through the list of items and see if they exist. This however will be time consuming and annoying since creating UITestControl items gets time consuming. Right now I use something along these lines which works fine but like I said it is time consuming.
UITestControlCollection rows = uIColScrollRegion0RowSTree.GetChildren();int rowCount;foreach (UITestControl uiTestControl in rows){UltraUiaControl uiRow = (UltraUiaControl) uiTestControl;if(uiRow.Exists && uiRow.AutomationId != "-1" && uiRow.AutomationId != "Band Headers"){rowCount++;}}
It would be much easier if you provided a row Count even if it doesn't exist now I would like if one was created for the future.
Jeremy,
It would definitely be easier if a custom DataRowCount property existed. Unfortunately at this time, it doesn't so I've provided a more efficient workaround to utilize until the DataRowCount property can be added. Once the work item entered on your behalf has been fixed and released, you will be automatically notified of its availability.
The code I previously provided is more efficient, due to the fact that it is utilizing UIA and the underlying AutomationElements instead of UITestControls. Looping through the AutomationElements is relatively quick compared to the UITestControls, (as you've already noted) the process of creating and matching UITestcontrols is quite heavy.
Let me know if you have any questions.
Chris
I think this is the best solution so far (and only I think :) )
http://ko.infragistics.com/community/forums/p/78243/410030.aspx#410030
THANKS A LOT!!!
Hello Almir,
In order for FindMatchingControls() to work, you need to make sure the TestControl on which you are calling the FindMatchingControls() exists. I've found it to be difficult to work with, and quite unreliable.
There are some community written utilities which may be of help. For instance, the WpfExtensions utility class has a GetChildren<T>() method which will get all children of a specific type.
For performance reasons, you might want to consider utilizing the underlying UIA framework, instead of looping and searching through the items on the Coded UI Test side of things. Operating on the CUIT side of things is very poor in terms of looping and searching due to the need for the framework to constantly map/match the UITestControls to the underlying elements.
Take a look at this post for a point of reference, and let me know if you have any questions.
Ok:
Can you do assert by cell value on ultra grid?
Let's say like this:
I have a grid row like this
1 | abcd | 12345 | test | true | 112211
I want to assert this grid and see if there is any row that contains cell with value abcd?
Is this clear?
Best
Almir,
What are you trying to find exactly? CodedUI works through 'Point's and I believe that this is the case here as well. Am I missing something, please let me know?
I am having the same issue.
I want even more :) if i am right for now it not possible to find the row by the value.
Even if i do tree.GetChildren() and loop through the items it is not possible to get the row values or cell values to compare with my desired value.
I tried also regular search like:
----------
tree is UltraUiaTree (but it is actually grid)
UltraUiaEdit edit = new UltraUiaEdit(tree );edit.SearchProperties.Add( UltraUiaEdit.PropertyNames.AutomationId, "Edit", PropertyExpressionOperator.Contains );UITestControlCollection collection = edit.FindMatchingControls();and collection is always 0.
???