To add to Jesús answer. A pattern I have used in the past, to make finding and interacting with particular elements in the current view, is to create an attached property which registers the element in a static map using the element's Name as a key. You can then access this static map from your automation scripts, allowing you to find out if the element exists, and get it's position to interact with (e.g. using View::MouseButtonDown), or to assert that it's dependency properties are in the correct state.
In XAML the attached property would look something like this:
<Button x:Name="helpButton" local:ViewDebug.Register="true" />
The attached property changed callback would add/remove the element from a static map.
And the ViewDebug class would have a static API, something like:
ViewDebug::HasElement("helpButton");
const FrameworkElement* = ViewDebug::GetElement("helpButton");
This setup only allows for one element per name, but you can bind a dynamic value to the element's name, such as adding a index to the end of a Name for items in a list.
If you want more information on this, please let me know.