Forum Discussion

hhagay's avatar
hhagay
Contributor
8 years ago

How to better identify objects in a web page.

Hi

I use the following properties to identify an object (drop-down-listbox).

 

ObjectType: Panel
contentText: Select...

However, there are two objects with these properties and I am unable to find a third unique property to use. Any ideas?

 

This is the method I use to locate the object:

	/**
	* Function Name:selectListbox
	* Description: find the object
	* @param {string} browserAUT
	* @param {string} lstobjType (example "Panel")
	* @param {string} lststr.  - the text of the particular object (example "Select...")
	* @param {string} sublstobjType (example "Panel")
	* @param {string} sulststr.  - the text of the particular object (example "Male")
	* @param (boolean)
	*/
function selectListbox(browserAUT, lstobjType, lststr, sublstobjType, sulststr)
{
	spUtils.beginlog("selectListbox");
	var page = Sys.Browser(browserAUT).Page("*");
	var lstbox_PropArray, lstbox_ValuesArray, lstbox;
	lstbox_PropArray = new Array("ObjectType", "contentText");
	lstbox_ValuesArray = new Array(lstobjType, lststr);
	lstbox = page.FindChild(lstbox_PropArray, lstbox_ValuesArray, 2000);
	if (lstbox.Exists)
	{
	  Sys.HighlightObject(lstbox);
		Log.Message(lstbox.FullName);
		lstbox.Click();
	}
	else
	  Log.Error("The object was not found.");    
		/**
		* SUB LIST ITEM
		*/
	var sublstbox_PropArray, sublstbox_ValuesArray, sublstbox;
	sublstbox_PropArray = new Array("ObjectType", "contentText");
	sublstbox_ValuesArray = new Array(sublstobjType, sulststr);
	sublstbox = page.FindChild(sublstbox_PropArray, sublstbox_ValuesArray, 2000);
	if (sublstbox.Exists)
	{
		Log.Message(sublstbox.FullName);
		sublstbox.Click();
	}
	else
	  Log.Error("The object was not found.");    
	spUtils.endlog();
}

Obviously the label name is unique, but I can't use it to open the list box.

 

Attached file has a copy of the Object Spy properties.

NOTE: The page is created by react and id's are dynamic so I can't use any react id confidently.


Thank you

 

6 Replies

  • tristaanogre's avatar
    tristaanogre
    Esteemed Contributor

    What about ObjectIdentifier or idStr?  Usually, if the page is constructed well, these will have unique values for each control.  

    • hhagay's avatar
      hhagay
      Contributor

       

      Not at this case.... 

      Refer to the attached Object Spy snapshots

       

      • tristaanogre's avatar
        tristaanogre
        Esteemed Contributor

        OK, I see what's going on...

        You're calling "FindChild" from the page level... That's going to search the entire tree at the page level for the object... and it will grab whatever it finds as the first item.  Since all the Select boxes are identified pretty much the same way, it's the tree hierarchy that is the identifying factor keeping them separate.  You need to start your search closer within the hierarchy to the object you're wanting to select.  I'm assuming that the "Gender" panel can be found by caption or label or innerText or something.  Once you find that panel, then you can do a "FindChild" to find the select box you need.