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

Find a Combobox Item

8 Answers 163 Views
General Discussions
This is a migrated thread and some comments may be shown as answers.
Natasha
Top achievements
Rank 1
Natasha asked on 20 Dec 2011, 06:29 PM
My RadComboboxItem is composed for two textbock. I need to find an element only by the content of the second textbock.
Name of the first text box is Ident.
Name of the second text box is content.

Change: I have attached the code

8 Answers, 1 is accepted

Sort by
0
Stoich
Telerik team
answered on 23 Dec 2011, 03:37 PM
Hello Natasha,
this requires a coded solution. I've attached the test that gets the job done. Here's the actual code I use with comments explaining each line of code:

String textBoxToSearchFor = "new 4";
             
            Pages.SilverlightApplication2.SilverlightApp.ComboRadcombobox.ToggleDropDown(); //Open drop down.
            //We access a pre-generated variable to access the element because we added it to the Elements Explorer
          
             
            //Go through each item in the combobox and find the one that hold the required textbox
            foreach (Telerik.WebAii.Controls.Xaml.RadComboBoxItem cbi in  Pages.SilverlightApplication2.SilverlightApp.ComboRadcombobox.ItemElements) {
              
             try //We use try/catch because Find.ByTextContent throws an exception when it doesn't find what it's looking for.
                cbi.Find.ByTextContent(textBoxToSearchFor); }
            catch (Exception e) {
             continue;   //Move on to the next item if the TextBox was not found inside of this one
            }
          
            cbi.Select(); //Select this item if the Exception was not thrown (i.e. Find found what it was looking for)
            }

I hope this helps, let me know if you have any additional questions.

Greetings,
Stoich
the Telerik team
Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the Telerik Public Issue Tracking system and vote to affect the priority of the items
0
Natasha
Top achievements
Rank 1
answered on 23 Dec 2011, 04:56 PM
Hi,
In your solution the tool the search for element in both textblock (indent and value).
I just want to search in combobox "value".
Thanks for your help.
0
Stoich
Telerik team
answered on 27 Dec 2011, 11:45 AM
Hi Natasha,
this requires a very minor change. The value TextBlock has the following tagname:
<TextBlock Name='content' AutomationId='content' Uid='34476226'>

So we need to verify that the element we want to select has that AutomationId. Here's the code that does it:
if (!cbi.AutomationId.Equals("content")) { continue; } else //If AutmationId does not match value TextBlock, move on
            {
            cbi.Select(); //Select this item if the Exception was not thrown (i.e. Find found what it was looking for)
            }

Here's how this integrates in the complete coded step:
String textBoxToSearchFor = "new 4";
              
            Pages.SilverlightApplication2.SilverlightApp.ComboRadcombobox.ToggleDropDown(); //Open drop down.
            //We access a pre-generated variable to access the element because we added it to the Elements Explorer
           
              
            //Go through each item in the combobox and find the one that hold the required textbox
            foreach (Telerik.WebAii.Controls.Xaml.RadComboBoxItem cbi in  Pages.SilverlightApplication2.SilverlightApp.ComboRadcombobox.ItemElements) {
               
             try //We use try/catch because Find.ByTextContent throws an exception when it doesn't find what it's looking for.
                cbi.Find.ByTextContent(textBoxToSearchFor); }
            catch (Exception e) {
             continue;   //Move on to the next item if the TextBox was not found inside of this one
            }
           
            if (!cbi.AutomationId.Equals("content")) { continue; } else //If AutmationId does not match value TextBlock, move on
            {
            cbi.Select(); //Select this item if the Exception was not thrown (i.e. Find found what it was looking for)
            }
                 
            }

Kind regards,
Stoich
the Telerik team
Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the Telerik Public Issue Tracking system and vote to affect the priority of the items
0
Natasha
Top achievements
Rank 1
answered on 27 Dec 2011, 12:39 PM
Hi Stoich,
I noticed this solution is very slow. For a combobox with 50 comboboxItem the solution delay is 4 minutes.
You have any idea how minimize the delay???
0
Stoich
Telerik team
answered on 28 Dec 2011, 05:53 PM
Hi Natasha,
the slowness is there because we're waiting for this:
cbi.Find.ByTextContent(textBoxToSearchFor);
to timeout which takes about 10 seconds.

We can change the so-called 'Find Strategy" in order to change this and speed things up. Check out the following blog post on setting Find Strategy:
http://blogs.telerik.com/blogs/posts/10-06-24/silverlight-test-automation-changing-the-element-find-strategy-to-avoid-timeoutexecution-2578840260.aspx

The new code should look like this:
String textBoxToSearchFor = "new 4";
               
            Pages.SilverlightApplication2.SilverlightApp.ComboRadcombobox.ToggleDropDown(); //Open drop down.
            //We access a pre-generated variable to access the element because we added it to the Elements Explorer
            
 
      // save the original strategy to set it back at test end
            FindStrategy originalStrategy = app.Find.Strategy;
 
  // reset the find strategy
                app.Find.Strategy = FindStrategy.WhenNotVisibleReturnNull;
 
 
               
 
            //Go through each item in the combobox and find the one that hold the required textbox
            foreach (Telerik.WebAii.Controls.Xaml.RadComboBoxItem cbi in  Pages.SilverlightApplication2.SilverlightApp.ComboRadcombobox.ItemElements) {
                
            
              if (  cbi.Find.ByTextContent(textBoxToSearchFor) != null) {
          
            
            if (!cbi.AutomationId.Equals("content")) { continue; } else //If AutmationId does not match value TextBlock, move on
            {
            cbi.Select();
            app.Find.Strategy = originalStrategy;
            break;
            }
                  
            }
        }

Greetings,
Stoich
the Telerik team
Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the Telerik Public Issue Tracking system and vote to affect the priority of the items
0
Natasha
Top achievements
Rank 1
answered on 28 Dec 2011, 06:36 PM
Hi Stoich,
This solution didn't find the element.
I send you my code and the test.
Thank you.
0
Accepted
Stoich
Telerik team
answered on 01 Jan 2012, 11:01 AM
Hi Natasha,

I reworked the code so that you don't need to change the Find Strategy. Currently setting Find Strategy doesn't seem to work 100% as expected which causes the code I sent you not to work. Here's the revised code:

// Navigate to : 'http://localhost:11960/SilverlightApplication2TestPage.aspx'
            ActiveBrowser.NavigateTo("http://localhost:11960/SilverlightApplication2TestPage.aspx");
            app = this.ActiveBrowser.SilverlightApps()[0]; 
          
            // radcombobox: drop down 'Open' action.
            String textBoxToSearchFor = "val6";
                            
            Pages.SilverlightApplication2.SilverlightApp.ComboRadcombobox.ToggleDropDown(); //Open drop down.
            //We access a pre-generated variable to access the element because we added it to the Elements Explorer
 
            //Go through each item in the combobox and find the one that hold the required textbox
            foreach (Telerik.WebAii.Controls.Xaml.RadComboBoxItem cbi in  Pages.SilverlightApplication2.SilverlightApp.ComboRadcombobox.ItemElements) {
                 
          //      FrameworkElement fwe = cbi.Find.ByText(textBoxToSearchFor);
                   FrameworkElement fwe = cbi.Find.ByExpression(new XamlFindExpression("textcontent="+textBoxToSearchFor));  
             
            if (fwe != null)
                {
                    Log.WriteLine("Found "+fwe.ToString());
                     
                    if (!fwe.AutomationId.Equals("content")) {
                        Log.WriteLine("Found desired text but not in 'content' textbox");
                        continue; } else
                         
                        {
                        cbi.Select();                     
                        break;
                        }       
                }
 
        }

Test is attached.  

All the best,
Stoich
the Telerik team
Do you want to have your say when we set our development plans? Do you want to know when a feature you care about is added or when a bug fixed? Explore the Telerik Public Issue Tracking system and vote to affect the priority of the items
0
Natasha
Top achievements
Rank 1
answered on 01 Jan 2012, 06:30 PM
Hi Stoich.
Thank you.
Happy new year
Tags
General Discussions
Asked by
Natasha
Top achievements
Rank 1
Answers by
Stoich
Telerik team
Natasha
Top achievements
Rank 1
Share this question
or