47

How would I switch to this iframe in selenium knowing only

<iframe name="Dialogue Window">
0

3 Answers 3

121

You can use an XPath to locate the <iframe>:

iframe = driver.find_element_by_xpath("//iframe[@name='Dialogue Window']")

Then switch_to the <iframe>:

driver.switch_to.frame(iframe)

Here's how to switch back to the default content (out of the <iframe>):

driver.switch_to.default_content()
Sign up to request clarification or add additional context in comments.

3 Comments

Good general solution, especially if the iframe has to be targeted by something other than a name - which is really the only way that the selenium docs specify transitioning
Works perfectly at last! After I have been researching a lot about why I can't find certain elements in the browser. I have been getting NoSuchElementException error before. I didn't realise that I need to switch to another iframe. Thanks!
driver.switch_to.default_content() also work in cases where you click action and are forwarded to another host.
35

As per the HTML of the <iframe> element, it has the name attribute set as Dialogue Window. So to switch within the <iframe> you need to use the switch_to() method and you can use either of the following approaches:

  • Using the name attribute of the <iframe> node as follows:

    # driver.switch_to.frame(‘frame_name’)
    driver.switch_to.frame("Dialogue Window")
    
  • Using the <iframe> WebElement identified through name attribute as follows:

    driver.switch_to.frame(driver.find_element_by_name('Dialogue Window'))
    
  • Using the <iframe> WebElement identified through as follows:

    driver.switch_to.frame(driver.find_element_by_css_selector("iframe[name='Dialogue Window']"))
    
  • Using the <iframe> WebElement identified through as follows:

    driver.switch_to.frame(driver.find_element_by_xpath("//iframe[@name='Dialogue Window']"))
    

Ideally, you should induce WebDriverWait inconjunction with expected_conditions as frame_to_be_available_and_switch_to_it() for the desired frame as follows:

  • Using NAME:

    WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.NAME,"Dialogue Window"))) 
    
  • Using CSS_SELECTOR:

    WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"iframe[name='Dialogue Window']")))
    
  • Using XPATH:

    WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//iframe[@name='Dialogue Window']")))
    

Switching back from frame

  • To switch back to the Parent Frame you can use the following line of code:

    driver.switch_to.parent_frame()
    
  • To switch back to the Top Level Browsing Context / Top Window you can use the following line of code:

    driver.switch_to.default_content()
    

tl; dr

Ways to deal with #document under iframe

Comments

-3

I have resolved this issue in Python-Selenium. Please use the below code:

srtHandle = driver.window_handles
driver.switch_to_window(srtHandle[0])

Then switch to the frame in which the element is located.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.