XPath : Finding GUI element by matching multiple text(s) pattern of a attribute value
Recently i had to spend my whole day searching for ways to find a elements' XPath (a ajax based button) by matching multiple text pattern within a single attribute value. I was using Selenium IDE to automate testing of Sun Portal Server GUI which is based on Ajax.
My Requirement : Uniquely Identify a ajax based button having the below XPath
//a[@id,'ccd_ccd_81533739_removeevent']
My Problem : Attribute(@id) value has both constant and dynamic texts which makes it difficult to uniquely identify the element based on its value
If you look at my ajax button's xpath , there is a numeral "81533739" which is not constant and it changes everytime but the first part(ccd_ccd_) and the second part(_removeevent) of the @id value is constant . I want to uniquely identify @id attribute based on these constant text alone
Solution:The below xpath will uniquely identify my element using concat() and contains() XPath methods
//a[contains(@id,concat("ccd","_","ccd","_")) and contains(@id,"removeevent")]
Below are few links which i found helpful for this solution:
Good result. If I understand your requirement the following will also serve by comparing the start and end of the id attribute:
//a[starts-with(@id, "ccd_ccd_") and substring(@id, string-length(@id) - 10, 11) = "removeevent"]
This expression looks more complex/awkward because there's no 'ends-with' function in XPath 1.0.
Instead, a substring is required first to get the end value. The first substring argument is the target string value, the second the start position, and the third the length of the sub-string to extract.
Not pretty, but it works:-)
Posted by Phil Fearon on March 05, 2008 at 08:05 AM PST #
Thanks for that comment phil.
wondering why xpath doesnt allow ends-with function although it already has a starts-with :)
Posted by Thekkadath on March 05, 2008 at 08:27 AM PST #
Good question. The W3C XPath guys must also have asked that - because there is an 'ends-with' function in XPath 2.0 :-)
Posted by Phil Fearon on March 05, 2008 at 08:43 AM PST #