1

I'm starting with Selenium and have a question, basically I don't understand why when I switch to an iframe and select one of the elements I constantly get:

selenium.common.exceptions.NoSuchWindowException: Message: no such window
  (Session info: chrome=84.0.4147.89)

This is the relevan code, firstly I click on some element of the DOM containing the iframe that actually updates the iframe content and then select the iframe, switch to it and then select the element I want inside the HTML content of the iframe

# Select the item on main DOM that will udpate the iframe contents
bandeja = driver.find_element_by_xpath("//*[@id='sm20']")
bandeja.click()
# Tried sleeping, but also WedDriverWait to no avails...
time.sleep(3)
# Get the frame that actually has the content
frame = driver.find_element(by=By.NAME, value="ifrInterior")
driver.switch_to.frame(frame)
# Select the element inside the iframe and click
equipo = driver.find_element_by_xpath("//input[@name='gestionesPropias_Equipo']")
equipo.click()

Now if I debug this, I don't get the error above, and I can see there element has been selected...but upon click nothing happens

enter image description here

This is the expected element, even checked the screenshot in base64 and it looks ok, it's a radio input button...just wondering why click doesn't work??

UPDATE: Based on response from @DebanjanB I used his sugestion and this works but the button does not get clicked

Upon clicking there should a new drop down be enabled

This is the radio button:

enter image description here

When clicked this drop-down is enabled:

enter image description here

The relevant code about this element

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

So now I wonder why this does not get clicked?

AlejandroVK
  • 7,373
  • 13
  • 54
  • 77

1 Answers1

1

As the desired element is within an <iframe> 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 the following based Locator Strategy:

  • Using CSS_SELECTOR:

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

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

Reference

You can find a couple of relevant discussions in:


tl; dr

“NoSuchWindowException: no such window: window was already closed” while switching tabs using Selenium and WebDriver through Python3

undetected Selenium
  • 183,867
  • 41
  • 278
  • 352
  • Hello @DebanjaB while this works and now I don't get the exception, the button does not get clicked...I'm updating the first post with pictures on what should be expected, as you can see, upon clicking a new section is shown with a dropdown...that is not shown obviously because I can see the radio button not being clicked upon...any ideas why is this happening? – AlejandroVK Jul 28 '20 at 15:42
  • @AlejandroVK This answer was specifically to address the `NoSuchWindowException` error. Can you raise a new question with your new requirement please? – undetected Selenium Jul 28 '20 at 16:38
  • here it is https://stackoverflow.com/questions/63144037/element-not-being-clicked-even-though-it-is-found-using-selenium – AlejandroVK Jul 28 '20 at 23:06