1

My application has a lot of selectors that have a dynamic ID inside. When that dynamic ID is at the end of the selector, I use [id^='staticPart'] inside of every selector. For example:

#tab-10 > svg > tspan

becomes:

[id^='tab-'] > svg > tspan

I works perfectly, but I can't figure out what to do with selectors like this:

#tab-t0-1

where 0 is a dynamic number and everything else is static. I am trying the following, but I get an invalid selector error:

[id^='tab-']-1
sprogissd
  • 2,755
  • 5
  • 24
  • 45

2 Answers2

2

To identify an element with dynamic id e.g. #tab-t0-1 where 0 is a dynamic number and everything else is static you can use cssSelector with the following wildcards :

  • ^ : To indicate an attribute value starts with

  • $ : To indicate an attribute value ends with

So the most granular locator would include the strategy to lookout for the initial letters i.e. tab-t and the ending letters i.e. -1 and should be :

[id^='tab-t'][id$='-1']

References

You can find a couple of relevant detailed discussions in:

undetected Selenium
  • 183,867
  • 41
  • 278
  • 352
0

You can, at the very least, combine both "starts with" and "ends with" selectors:

[id^='tab-'][id$='-1']

In general, though, depending on the selectivity of the id values like these, the [id$='-1'] part might not be significant or distinguishing and something more straightforward could be enough:

[id^=tab]

This is, of course, specific to the particular markup you are dealing with.

alecxe
  • 462,703
  • 120
  • 1,088
  • 1,195