This is a migrated thread and some comments may be shown as answers.

Finding and clicking dynamic buttons

2 Answers 292 Views
General Discussions
This is a migrated thread and some comments may be shown as answers.
Nigel
Top achievements
Rank 2
Nigel asked on 29 Feb 2012, 11:42 AM

Hi,
I need help to find and identify screen objects whose name changes.
Specific Scenario Example
I have a screen with a Logout button.  The visible text on the button is 'Logout ' plus the name of the logged on user (e.g. 'Logout Admin').  When I record the action of clicking on the button in Test Studio the script supplies a line that reads:
   
Click 'LogoutSpan'
or
   
Click 'LogoutSpan0'
or similar.
Question
How can I script so that the action works regardless of any number that may be appended to the 'LogoutSpan' part?
In fact, how can I identify anything (e.g. a 'Div') where its name or ID changes dynamically?

I thought that maybe some VB in the Code Behind window would be a solution, perhaps using a regular expression.  In the case of the button I came up with:

    Find.ByExpression("name=~Logout")
which I think will find any screen object with 'Logout' in its name, but got no further.  I tried to write an excution line, something like:
   
Button.Click(Find.ByExpression("name=~Logout"))
but the type-ahead prompt in the Code Behind window didn't have 'Button.Click' as an option.

I'm not a code wizard, and don't really understand regular expressions (and yes, I've read the available on-line documentation) so I would very much appreciate some help with this.  If I have a concrete example of how to resolve the above then I can build on it for the future.

Thanks,
Nigel Edwards, Transition Computing.

 

 

2 Answers, 1 is accepted

Sort by
0
Accepted
Anthony
Telerik team
answered on 29 Feb 2012, 07:26 PM
Hello Nigel,

First I'd like to clear up some confusion on How the Element Repository Works. If a new element is added each time you click the button when the text differs, then it likely does not have a unique attribute (like ID or name) attached to it. My guess is that Test Studio is crafting the Find Expression of each newly added element based on text content. If that's the case you can easily edit the Find Expression to locate the element based on "textcontent contains logout".

To proceed in code you'll need to inspect the HTML surrounding that element. It seems Test Studio is referencing a <span> element and not a <button>. In that case you can use the following VB code:

Dim s As HtmlSpan = Find.ByExpression(Of HtmlSpan)("textcontent=~logout", "name=logout")
Assert.IsNotNull(s)
s.Click()

Substitute textcontent and name for whatever attribute you'd like, or only reference one attribute instead of two. See here for more information.

You can also identify and act upon elements the standard way, but it's not as robust as the HTML Control Element Wrappers Suite:

Dim e As Element = Find.ByExpression("textcontent=~logout")
Assert.IsNotNull(e)
Actions.Click(e)

See here for more info.

Greetings,
Anthony
the Telerik team
Quickly become an expert in Test Studio, check out our new training sessions!
Test Studio Trainings
0
Nigel
Top achievements
Rank 2
answered on 01 Mar 2012, 09:53 AM
Hi Anthony,

Once again you've provided a great solution, so many thanks for your efforts.
Nigel.
Tags
General Discussions
Asked by
Nigel
Top achievements
Rank 2
Answers by
Anthony
Telerik team
Nigel
Top achievements
Rank 2
Share this question
or