How to work with iframes

One does not simply input text into an iframe. 👌

The following robot navigates to the Stripe Payments Demo page and enters data into two form fields. What's interesting about the form is that one of the fields (Card) is inside an iframe element. The other field (Name) is on the page outside the iframe:

Stripe Payments Demo

Selenium (RPA.Browser.Selenium)

*** Settings ***
Documentation       Working with forms inside and outside of an iframe.
...                 Selenium-based RPA.Browser.Selenium library.

Library             RPA.Browser.Selenium


*** Tasks ***
Input text in form field inside an iframe, then outside the iframe
    Open Available Browser    https://stripe-payments-demo.appspot.com/
    Wait Until Element Is Visible    tag:iframe
    Select Frame    tag:iframe
    Input Text When Element Is Visible    name:cardnumber    4242424242424242
    Unselect Frame
    Input Text    name    Robot

The Select Frame keyword (from the RPA.Browser.Selenium library) selects the iframe using its name as the locator. After entering the value into the field inside the iframe, the Unselect Frame keyword is used to move the focus back to the main window. After that, it is possible to input text into the fields outside the iframe.

Playwright (Browser)

Here is the same logic implemented with the Playwright-based Browser library:

Read A new option for web automation: Using the Robot Framework Browser library, based on Playwright for more information on how to install and use the Browser library.

*** Settings ***
Documentation       Working with forms inside and outside of an iframe.
...                 Playwright-based Robot Framework Browser library.

Library             Browser


*** Tasks ***
Input text in form field inside an iframe, then outside the iframe
    New Page    https://stripe-payments-demo.appspot.com/
    Type Text    css=iframe >>> input[name="cardnumber"]    4242424242424242
    Type Text    css=input[name="name"]    Robot

There you have it: Moving in and out of an iframe!

May 5, 2022