0
votes

I'm trying to click on an element (radio button) using Selenium (in Python), I can't disclose the URL because it's a private corporate intranet, but will share the relevants part of code.

So basically this element is within an iframe, thus, I've used the following code to get the element:

# Select the item on main DOM that will udpate the iframe contents
wait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//*[@id='sm20']"))).click()
# Don't sleep, but only WedDriverWait...
wait(driver, 20).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//iframe[@name='ifrInterior']")))
# Select the element inside the iframe and click
wait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@name='gestionesPropias_Equipo']"))).click()

The HTML code for the element is this:

<span class="W1">
    <input type="radio" name="gestionesPropias_Equipo" value="1" onclick="javascript:indicadorPropiasEquipo(); ocultarPaginacion('1'); limpiarDatosCapaResultado();">
</span>

I'm interested in clicking this because when we click on it a drop-down is enabled:

enter image description here

If clicked then the dropdown is enabled:

enter image description here

The intersting HTML code for this is

<span id="filtroAsignado" class="W30">
            
    <select name="nuumaAsignado" class="W84">       
        <option value="">[Todo mi equipo]</option></select>
            
</span>

Debugging a bit Selenium I can see that the elemtn is found:

enter image description here

And this is actually the base64 image of the element, which is the expected radio button

enter image description here

So I'm wondering why the element actually does not get clicked??

UPDATE: Based on request from @DebanjanB, I'm adding the HTML code from the iframe, which is enclosed inside a div in the main page:

<div id="contenido">
        <iframe frameborder="0" id="ifrInterior"  name="ifrInterior" src="Seguimiento.do?metodo=inicio" scrolling="auto" frameborder="0"></iframe>
</div>

Actually if I look for the word "iframe", there's only one...

Now checking the iframe source itself, has several iframes hidden but the element I need to interact with is in the iframe mentioned above, the only thing that I forgot to mention is that it's inside a form, but I guess that's not relevant? You can see the whole structure in the following image:

enter image description here

2

2 Answers

1
votes

Great question. If you know that selenium found the element, you can use Javascript to click the element directly. The syntax is:

driver.execute_script("arguments[0].click();", element)

You can also do this, which works the same way:

automate.execute_script("arguments[0].click();", wait.until(EC.element_to_be_clickable((By.XPATH, 'Your xpath here'))))

Essentially you are having Selenium run a javascript click on the element you have found which bypasses Selenium. Let me know if this helps!

0
votes

I don't see any such issue with your code block either. Perhaps you can try out either of the following options:

  • Using ActionChains:

    ActionChains(driver).move_to_element(WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@name='gestionesPropias_Equipo' and @type='radio']")))).click().perform()
    
  • Using executeScript() method:

    driver.execute_script("arguments[0].click();", WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@name='gestionesPropias_Equipo' and @type='radio']"))))