1

I'm working on a Selenium Project, and I need to click on the first child of this ul got by xpath:

bot.find_element_by_xpath('//*[@id="mailappcomponent"]/div/div/div[2]/div/div/div[2]/div/div[1]/ul').click()

Can you help me?

Benjamin Loison
  • 3,782
  • 4
  • 16
  • 33

2 Answers2

2

To identify the first child of the <ul> element:

//*[@id="mailappcomponent"]/div/div/div[2]/div/div/div[2]/div/div[1]/ul

you have to use either the tag_name and/or the attributes of the child/descendant element.

In case the first child (descendant) is a <li> you have to append /li at the end as follows:

//*[@id="mailappcomponent"]/div/div/div[2]/div/div/div[2]/div/div[1]/ul/li

Incase the first child (descendant) is a <ol> you have to append /ol at the end as follows:

//*[@id="mailappcomponent"]/div/div/div[2]/div/div/div[2]/div/div[1]/ul/ol

Now, to click on the element you need to induce WebDriverWait for the element_to_be_clickable() and you can use either of the following Locator Strategies:

//in case of descendant li
WebDriverWait(bot, 20).until(EC.element_to_be_clickable((By.XPATH, "//*[@id="mailappcomponent"]/div/div/div[2]/div/div/div[2]/div/div[1]/ul/li"))).click()
//in case of descendant ol
WebDriverWait(bot, 20).until(EC.element_to_be_clickable((By.XPATH, "//*[@id="mailappcomponent"]/div/div/div[2]/div/div/div[2]/div/div[1]/ul/ol"))).click()

Note: You have to add the following imports :

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
Benjamin Loison
  • 3,782
  • 4
  • 16
  • 33
undetected Selenium
  • 183,867
  • 41
  • 278
  • 352
1

You Can Click on First list item by using XPATH

bot.find_element_by_xpath('//[@id="mailappcomponent"]/div/div/div[2]/div/div/div[2]/div/div[1]/ul/li[1]').click()

If want to click on second third and so on just change /li[number you want]

Benjamin Loison
  • 3,782
  • 4
  • 16
  • 33
Haseeb Ahmed
  • 265
  • 3
  • 10