frame标签有frameset、frame、iframe三种,frameset跟其他普通标签没有区别,不会影响到正常的定位,而frame与iframe需要切换进去才能定位到其中的元素
比如下面这个网页,有多个frame,以及嵌套iframe,我们在操作里面元素时,需要切换进去。
登陆后,我们要切换进leftFrame进行操作
代码:
# coding = utf-8 from selenium import webdriver # 驱动文件路径 driverfile_path = r'D:coshipTest_FrameworkdriversIEDriverServer.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,可以用
参考博客:https://www.cnblogs.com/eastonliu/p/9105142.html