web自动化09-frame切换、多窗口切换
frame切换
1、html代码:
<frameset cols="25%,50%,25%">
<frame src="a.htm">
<frame src="b.htm">
<frame src="c.htm">
</frameset>
上述是frame框架页面元素
看看展示效果:

2、我们无法定位三个页面的元素,怎么办呢?
说明:在Selenium中封装了如何切换frame框架的方法
方法:
1). driver.switch_to.frame(frame_reference) --> 切换到指定frame的方法
frame_reference:可以为frame框架的name、id或者定位到的frame元素
2). driver.switch_to.default_content() --> 恢复默认页面方法
如果想要切换下一个页面,需要回到默认页面在进行操作
3、看需求:打开‘注册实例.html’页面,完成以下操作:
1). 填写主页面的注册信息 2). 填写注册页面A中的注册信息 3). 填写注册页面B中的注册信息
doing:
1. 完成主页面注册信息; 2. 调用frame切换方法(switch_to.frame("myframe1"))切换到注册用户A框架中
//想要切换到另一个frame页面,需要回到默认页面 3. 调用恢复默认页面方法(switch_to.default_content()) 4. 调用frame切换方法(switch_to.frame("myframe2"))切换到注册用户B框架中
多窗口切换
说明:在HTML页面中,当点击超链接或者按钮时,有的会在新的窗口打开页面。
1、 为什么要切换窗口?
如果我们定位元素,操作中打开了一个新的窗口,我们想要到新的窗口中
2、如何切换窗口?
说明:在Selenium中封装了获取当前窗口句柄、获取所有窗口句柄和切换到指定句柄窗口的方法;
句柄:英文handle,窗口的唯一识别码
每个浏览器的句柄值也不一样
方法:
1). driver.current_window_handle --> 获取当前窗口句柄
2). driver.window_handles --> 获取所有窗口句柄
3). driver.switch_to.window(handle) --> 切换指定句柄窗口
先获取,在切换
切换窗口:列表的 -1 索引对应的值,始终是最新窗口的句柄值
driver.switch_to.window(handles[-1])
看需求:
打开‘百度首页’页面,完成以下操作 1). 点击‘百度热搜’进入热搜页面 2). 在热搜页面中,停留3s,关闭当前页面
3). 回到百度首页
doing:
1). 点击‘百度热搜’进入热搜页面
driver.find_element(by=By.CSS_SELECTOR, value='[aria-label="百度热搜"]').click()
2). 在热搜页面中,停留3s,关闭当前页面
sleep(3)
# 获取当前所有句柄
handles = driver.window_handles
# 切换到当前页面
driver.switch_to.window(handles[-1])
driver.close()
3). 回到百度首页
driver.switch_to.window(handles[0])
关闭当前页面后,不会自动回到上一页,如果想要回到上一页操作,需要切换句柄
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了