自动化测试中 iframe 相关问题与解决方案拓展
基础在Selenium 处理 iframe 和 iframe 的基础介绍-CSDN博客,不过这里也有部分重复喵
iframe
的基本切换
切换到 iframe
Selenium 提供 switch_to.frame()
方法:
# 根据 iframe 的 ID 切换
driver.switch_to.frame("iframe_id")
# 根据 iframe 的 name 切换
driver.switch_to.frame("iframe_name")
# 根据 WebElement 切换
iframe_element = driver.find_element(By.TAG_NAME, "iframe")
driver.switch_to.frame(iframe_element)
切回主页面
执行完 iframe
内部的操作后,需切回主页面:
driver.switch_to.default_content()
处理 iframe
内的动态元素
如果 iframe
内部的元素是 Ajax 动态加载 的,即使 iframe
已经切换成功,仍然可能找不到元素。
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
# 先切换到 iframe
driver.switch_to.frame("iframe_id")
# 等待 iframe 内的按钮加载完成
button = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, "submit_button"))
)
button.click()
# 切回主页面
driver.switch_to.default_content()
处理 iframe
内的元素
在 iframe
内找到元素时,要确保已经成功切换到 iframe
:
# 先切换到 iframe
driver.switch_to.frame("iframe_id")
# 访问 iframe 内部的元素
button = driver.find_element(By.ID, "submit_button")
button.click()
# 切回主页面
driver.switch_to.default_content()