Selenium frame 切换处理

机智的测试生活

HTML 中,frame 标签有3种类型:frameset、frame、iframe。

对于 frameset ,跟其他普通标签没有区别,都可以正常定位。

frame 与 iframe 属于特殊的一种类型,它们内部会包含一个被嵌入的另一份 HTML 文档。

在使用 Selenium 打开网页时,并不包含被嵌入的 HTML 文档。

如果需要操作被嵌入的 HTML 文档内的元素,必须将 操作范围 切换到被嵌入的 HTML 文档中。

Selenium 提供的方法是:

WebDriver.switch_to.frame(frame_reference)

其中, frame_reference 可以是 frame 元素的属性 name 或者 id 的属性值(默认定位方式)

另外一种情况,如果没有属性 name 或者 id,可以先定位到 frame 元素,再进行切换

from selenium import webdriver
from time import sleep

driver = webdriver.Chrome()  # 打开浏览器
driver.get("https://mail.163.com/")  # 跳转至测试页面
sleep(1)
frame_element = driver.find_element_by_xpath("//iframe[contains(@id, 'x-URS-iframe')]")  # 先定位到 iframe 元素
driver.switch_to.frame(frame_element)  # 切换到 iframe 元素内部
element = driver.find_element_by_name("email")  # 定位元素
element.send_keys("123456789")  # 输入内容
sleep(3)

driver.quit()  # 关闭浏览器

如果需要重新切换出来定位元素,Selenium 提供的方法:

序号方法/属性描述
1WebDriver.switch_to.default_content()返回主文档
2WebDriver.switch_to.parent_frame()返回父文档

from selenium import webdriver
from time import sleep

driver = webdriver.Chrome()  # 打开浏览器
driver.get("https://mail.163.com/")  # 跳转至测试页面
sleep(1)
frame_element = driver.find_element_by_xpath("//iframe[contains(@id, 'x-URS-iframe')]")  # 先定位到 iframe 元素
driver.switch_to.frame(frame_element)  # 切换到 iframe 元素内部
element = driver.find_element_by_name("email")  # 定位元素
element.send_keys("123456789")  # 输入内容
sleep(2)
driver.switch_to.parent_frame()  # 返回到父文档
# driver.switch_to.default_content()  # 返回到主文档
element1 = driver.find_element_by_link_text("VIP邮箱")  # 定位元素
element1.click()  # 点击

sleep(3)

driver.quit()  # 关闭浏览器

总结

阅读 1.3k

机智的测试生活
双非大龄青年,转行测试工程师。 分享测试工程师的职业经验, 提供付费转行咨询

公号|机智的测试生活

75 声望
477 粉丝
0 条评论

公号|机智的测试生活

75 声望
477 粉丝
文章目录
宣传栏