多窗口场景
实际使用时,经常出现新浏览器窗口(或新标签页),需要切换
切换到最新窗口
切换到最新窗口的步骤:
list1 = driver.window_herdles
driver.swich_to.window(list1[-1])
- driver.window_herdles
- 获取打开的所有窗口句柄,是一个列表
- 句所谓句柄(handles),就是窗口的唯一标识,系统通过窗口的句柄来区分不同的窗口。
- 列表中每个窗口句柄的出现顺序是窗口的启动顺序,所有最后启动的那个窗口的句柄就是列表最后一个成员(索引号是-1)。
获得当前窗口句柄
- driver.current_window_handle获得当前窗口句柄
- 应用场景
- 可以在切换到最新窗口之前获得原窗口句柄,切换到新窗口进行操作之后,再使用这个原来保存的句柄切换回去。
- 可以在切换到最新窗口之前获得原窗口句柄,切换到新窗口进行操作之后,再使用这个原来保存的句柄切换回去。
关闭窗口的方法
# 关闭本次运行期间所启动的所有浏览器窗口,退出驱动程序,一般用于程序末尾,测试结束后使用
driver.quit()
# 关闭当前一个浏览器窗口,保留其它浏览器窗口,一般用于业务步骤之间,属于一个测试中间的操作步骤
driver.close()
"""
打开前台首页
点击 "EC论坛",等待8秒
获得当前窗口句柄,保存在变量中
切换到最新窗口
在新窗口里点击右上角的 注册 等待3秒
关闭新窗口
用前面变量里保存的句柄切换到原窗口
点击 高级搜索
"""
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
driver = webdriver.Firefox() # 启动浏览器
driver.get('http://localhost/upload/index.php')
driver.find_element(By.LINK_TEXT,'EC论坛').click() # 点击 登录按钮
a = driver.current_window_handle
b = driver.window_handles
driver.switch_to.window(b[-1])
driver.find_element(By.LINK_TEXT,'注册').click()
driver.close()
driver.switch_to.window(a)
driver.find_element(By.LINK_TEXT,'高级搜索').click()
sleep(3)
driver.quit()
注意事项:
-
所有的操作只针对当前窗口
- 比如close只关闭当前一个窗口,find_element查找元素只在当前窗口里查找
-
没有执行窗口切换的代码时,当前窗口就是最初启动的窗口
-
当前窗口已经被关闭后,不会自动切换到其它窗口
- 就算其它窗口只有一个,也不会自动变为当前窗口
-
NoSuchWindowException异常原因
- 当前窗口已经被关闭,或要切换到目标窗口句柄不正确
切换窗口语法总结
- driver.current_window_handle → 获得当前浏览器窗口句柄
- driver.windows_handles → 获得所有浏览器窗口句柄(List)
- driver.switch_to.window(窗口句柄) → 切换到特定窗口
- driver.close() → 关闭当前一个浏览器窗口
- driver.quit() → 关闭所有浏览器窗口