1

I am trying to click a button with selenium. I have tried Chrome and Firefox console with $0.click(); and works but when testing with the selector it does not work, "undefined", document.querySelector("#td").click();.

I trying with selenium does not work.

HTML:

<td id="td" onclick="if(top.body) Len('td')" class="lenDesActiv">Date</td>

I tried the following:

driver.execute_script('document.querySelector("td#tdDos.lenguetaActiva").click();')
driver.execute_script('document.querySelector("td#").click();')
driver.execute_script('document.querySelector("#td").click();')
driver.execute_script('document.querySelector("td#td").click();')
driver.execute_script('document.getElementById("td").click();')
driver.findElement(By.id("td")).click();
document.getElementById("td").addEventListener("click", function(){
    alert("hello world");
});

loginelement = driver.find_element(By.ID, 'td')
driver.execute_script("arguments[0].click();", loginelement)
Dandal
  • 168
  • 9

3 Answers3

1

Try this.

First switch to the frame.

driver.switch_to.frame("body")

wait for the element to be clickable.

WebDriverWait(driver,20).until(EC.element_to_be_clickable((By.XPATH, '//td[@id="td"]')))

Click on element using JavaScriptExecutor.

driver.execute_script('document.querySelector("td").click()')
Dandal
  • 168
  • 9
Dilip Meghwal
  • 585
  • 4
  • 14
1

Your issue was an iframe switch to it first.

driver.get("https://webpage.com")
driver.switch_to.frame(driver.find_element_by_xpath("/html/frameset/frameset/frame[2]"))
loginelement = driver.find_element(By.ID, 'td')
driver.execute_script("arguments[0].click();", loginelement)
Dandal
  • 168
  • 9
Arundeep Chohan
  • 6,219
  • 4
  • 6
  • 22
1

The WebElement with text as Fecha is within a <frame> so you have to:

  • Induce WebDriverWait for the desired frame to be available and switch to it.

  • Induce WebDriverWait for the desired element to be clickable.

  • You can use either of the following Locator Strategies:

  • Using CSS_SELECTOR:

    driver.get('https://your_website.com/')
    WebDriverWait(driver, 20).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"frame[name='body']")))
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "td#tdDos.lenguetaDesActiva"))).click()
    
  • Using XPATH:

    driver.get('https://your_website.com/')
    WebDriverWait(driver, 20).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//frame[@name='body']")))
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//td[@id='tdDos' and @class='lenguetaDesActiva']"))).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
    
  • Browser Snapshot:

Fecha


Reference

You can find a couple of relevant discussions in:

DebanjanB
  • 118,661
  • 30
  • 168
  • 217