Home > OS >  How to find Xpath of any "city" of variable dropdown?
How to find Xpath of any "city" of variable dropdown?

Time:02-15

  1. I installed Chrome addon "Selectors Hub".

  2. I opened site: spicejet.com

  3. I choose some random city of "from" dropdown.

  4. With help of "Selectors Hub" chrome addon, I grabbed the Xpath code of that city:

    //div[@class='css-1dbjc4n r-14lw9ot r-z2wwpe r-vgw6uq r-156q2ks r-urutk0 r-8uuktl r-136ojw6']//div[11]

enter image description here

While validating this Xpath code in console, it shows 0 matches.

enter image description here

CodePudding user response:

This website is built on ReactJs as front-end, if I am not wrong, and finding the elements of a ReactJs website is a bit challenging; adding to that, if you rely on some locator finding tool, it's gets more difficult. It's always better you build your own locator strategy than rely on tools, especially for websites built with React, Vue, etc.

Having said that, the strategy here is to find the relatively narrowed down relative locator, and then since you are looking for a random selection of city, collect all the cities first, then apply random to it. Here is what it figured:

I collected cities, but along with it came some unwanted items (courtesy my relative locator), and I check them and if they are picked up, I pass them out, and only when a city is selected by random, I click on it. Check this code:

import random    

driver.get("https://www.spicejet.com/")
time.sleep(10)
driver.find_element(By.XPATH, "//div[@data-testid='to-testID-destination']").click()
time.sleep(2)
cities = driver.find_elements(By.XPATH, "//div[@data-testid='to-testID-destination']//div[@data-focusable='true']")
print(len(cities))
x = random.choice(cities)
if x.text in ['To', 'India', 'International']:
    pass
else:
    print(x.text)
    x.click()
time.sleep(5)
driver.quit()

Output:

Pakyong
Pakyong Airport
PYG

Process finished with exit code 0
  • Related