How to Switch Between IFrames Using Selenium Python
A common type of control used on the website is HTML iframe. This control needs to be handled in a specific manner while testing. In this article, I will show you how to handle iframes using Selenium Python
What is an iframe?
An iframe (Inline Frame) is an HTML document embedded in another HTML document. The iframe HTML element is often used to insert the content from another source, such as an advertisement, into a Web page.
How To Handle iframes Using Selenium Python
We can handle iframes with Selenium WebDriver. In an HTML document, we can have web elements that are a part of another webpage. The iframe in an HTML document is described inside a <frame> or <iframe> tag. If there are multiple iframes, they are part of the <frameset> tag.
An iframe can be identified on a web page with the help of its name, id, web element, or the index. To access an element inside an iframe, we have to switch the focus from the main page content to the specific iframe where the element is present.
Let us consider a sample HTML code with frame/ iframe tag.
< frame id="fid" name="fname" class='fclass' > </frame> < frame id="fid1" name="fname2" class='fclass2' ></frame>
To switch to a frame/ iframe with the value of the name attribute in the HTML, the syntax is:
To switch to a frame/ iframe with the value of the id attribute in the HTML, the syntax is:
We can switch to a frame/ iframe with the help of the locators like CSS or XPath. The locators like link text and partial link text do not work with the frames. Also, if the page contains multiple frames, then the tagname locator will not be able to identify a particular frame/ iframe we are looking for.
To switch to a frame/ iframe using css, the syntax is
driver.switch_to.frame (“frame[class = ‘fclass’] “)
The syntax with XPath is
driver.switch_to.frame (“frame [@class = ‘fclass’] “)
To switch to a frame/ iframe with index, the syntax is:
The index of a frame/ iframe starts from 0. All the frames/ iframes on a web page are assigned with an index.
To switch the focus from all the frames/ iframes and move to the main web page, the method to be used is switch_to.default_content (). Once we shift out of the frame we can no longer access the elements inside the frame.
Code Implementation with frame.
# import the webdriver
from selenium import webdriver
# import the Keys class
from selenium.webdriver.common import keys
driver = webdriver.Chrome (executable_path="C:\\chromedriver.exe")
# get method to launch the URL
driver.get ("https://the-internet.herokuapp.com/nested_frames ")
# to switch to a frame with name attribute
# to identify an element inside that frame and get text
print ( driver.find_element_by_css_selector ("body").text)
# to switch to the main page content
# to close the browser
Conclusion: Switching Between iframes using Selenium Python
We face iframes many times while recording our selenium scripts. So it is very important to know how to handle switching between iframes using Selenium Python. Hope you got a clear idea on how to handle it now.
If you have any other questions, please comment below.