Element not being clicked even though it is found using Selenium

送分小仙女□ 提交于 2020-08-10 20:14:48

问题


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:

If clicked then the dropdown is enabled:

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:

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

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:


回答1:


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!




回答2:


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']"))))
    


来源:https://stackoverflow.com/questions/63144037/element-not-being-clicked-even-though-it-is-found-using-selenium

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!