Selenium 多表单(frame/iframe)切换

Posted eastonliu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Selenium 多表单(frame/iframe)切换相关的知识,希望对你有一定的参考价值。

frame标签有frameset、frame、iframe三种,frameset跟其他普通标签没有区别,不会影响到正常的定位,而frame与iframe需要切换进去才能定位到其中的元素

比如下面这个网页,有多个frame,以及嵌套iframe,我们在操作里面元素时,需要切换进去。

登陆后,我们要切换进leftFrame进行操作

代码:

# coding = utf-8
from selenium import webdriver
# 驱动文件路径
driverfile_path = r\'D:\\coship\\Test_Framework\\drivers\\IEDriverServer.exe\'
# 启动浏览器
driver = webdriver.Ie(executable_path=driverfile_path)
# 打开网页
driver.get(r\'http://172.21.13.83:28080/\')
# 登录
driver.find_element_by_css_selector("[name=\'admin.loginName\']").send_keys("autotest")
driver.find_element_by_css_selector("[name=\'admin.password\']").send_keys("111111")
driver.find_element_by_css_selector("input#imageField").click()
# 进入leftFrame
driver.switch_to.frame("leftFrame")
# 点击链接
driver.find_element_by_css_selector("a[title=\'媒资编辑\']").click()
# 退出
driver.quit()

switch_to.frame()默认可以直接使用表单(frame/iframe)的id或name属性。如果表单没有id和name属性,可以使用元素定位方法先找到这个表单,再切换进去

# 先定位到leftFrame
leftframe = driver.find_element_by_css_selector("frameset#switchFrame>frame")
# 切换进leftFrame
driver.switch_to.frame(leftframe)

假如在leftFrame中操作完成后,我们还需要进入mainFrame操作元素。这就就要先退出leftFrame,回到主页,再进入mainFrame

# 进入leftFrame
driver.switch_to.frame("leftFrame")
# 点击链接
driver.find_element_by_css_selector("a[title=\'媒资编辑\']").click()
# 跳出leftFrame,回到主页
driver.switch_to.default_content()
# 进入mainFrame
driver.switch_to.frame("mainFrame")
# 点击导入
driver.find_element_by_link_text("导入").click()

switch_to.default_content()是跳回最外层页面。

如果进入了多层frame,我们只是想回到上一个frame,可以用

driver.switch_to.parent_frame()

 

以上是关于Selenium 多表单(frame/iframe)切换的主要内容,如果未能解决你的问题,请参考以下文章

基于python实现UI自动化4. 一文搞定selenium 多表单(iframe/ frame)切换

基于python实现UI自动化4. 一文搞定selenium 多表单(iframe/ frame)切换

学习Selenium元素定位--多表单切换

selenium 窗口切换(多表单切换)

selenium多表单操作与多窗口,以及警告框处理

selenium学习:多表单的切换