How To Switch Between Iframes Using Selenium And Python?
Solution 1:
The card number and name fields are in different <iframe>
so you have to:
Induce WebDriverWait for the desired frame to be available and switch to it for the card number field.
Switch to the Default Content
Induce WebDriverWait for the desired frame to be available and switch to it for the name field.
You can use either of the following xpath based Locator Strategies:
WebDriverWait(driver, 20).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//iframe[@class='card-fields-iframe' and starts-with(@id, 'card-fields-number')]"))) # perform other operations driver.switch_to.default_content() WebDriverWait(driver, 20).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//iframe[@class='card-fields-iframe' and starts-with(@id, 'card-fields-name')]")))
Note : You have to add the following imports :
from selenium.webdriver.support.uiimportWebDriverWaitfrom selenium.webdriver.common.byimportByfrom selenium.webdriver.supportimport expected_conditions asEC
Reference
You can find a couple of relevant discussions in:
Solution 2:
Use unique locator as you do for any other elements
The syntax for switch to frame is
driver.switch_to.frame(WebElement)
So you don't need use just tag name , you can use xpath , Id , css etc like anyothr element
We use tag usually because there will be only one iframe in most cases . If you have multiple iframes find each iframes uniquely as you do for other elements using any other attributes like I'd,class etc of the specific iframe
driver.switch_to.frame(driver.find_element_by_xpath('//iframe[@id="card-fields-name-fpsn1ey65to00000"]'))
Solution 3:
I'd suggest using the parent tag as it has a more identifiable div tag that can be xpathed to.This way you can just go to the iframe you want before finding the input tag to send keys to.
driver.switch_to.frame(driver.find_element_by_xpath("div[@data-card-fields='number']/iframe"))
Post a Comment for "How To Switch Between Iframes Using Selenium And Python?"