在平时的自动化测试时,经常会遇到从当前的页面操作后跳转到一个新打开的窗口页面。这时候就需要在新老多个窗口间进行切换了。例如我下面的例子,首先在浏览器中打开百度www.baidu.com,然后在检索框中输入需要检索的内容“selenium”,点击“百度一下”。点击百度翻译,跳转到百度翻译页面。切换句柄到百度翻译页面,关闭该页面。回到百度搜索页,关闭浏览器。
from selenium import webdriver
import time
'''
本案例主要来说明新老窗口的切换
'''
driver = webdriver.Chrome()
driver.maximize_window()
driver.get("https://www.baidu.com/")
# 打印当前操作界面的句柄
current_handle = driver.current_window_handle
print('current_handle', current_handle)
driver.implicitly_wait(2) # 如果找到了就继续,否则2秒等待
driver.find_element_by_id("kw").send_keys("selenium") # 在搜索框中输入‘selenium’关键字
time.sleep(2) # 强制等待2秒
# 获取当前打开页的所有句柄并打印,应该只有一个
all_handles = driver.window_handles
print('all_handles', all_handles)
# 找到百度一下的按钮,点击
driver.find_element_by_id("su").click()
# 点击后进入新窗口,新窗口有自己的句柄
# 找到百度翻译,点击
driver.find_element_by_link_text("百度翻译").click()
# 获取进入新窗口后所有的句柄,并打印当前所有的句柄,此次应该有两个了
all_handles2 = driver.window_handles
print('all_handles2', all_handles2)
driver.implicitly_wait(2)
# 拿到新窗口句柄
newhandle = [handle for handle in all_handles2 if handle not in all_handles]
# 打印新窗口
print('newhandle', newhandle[0])
# 切换到新窗口
driver.switch_to.window(newhandle[0])
time.sleep(2)
# 打印新窗口的title
print('新窗口的title:', driver.title)
# 关闭当前窗口
driver.close()
driver.implicitly_wait(5)
time.sleep(1)
# 切换到原窗口
driver.switch_to.window(all_handles[0])
# 打印原窗口的title和切换后的句柄
print('原有老窗口的title:', driver.title)
print(driver.current_window_handle)
# 退出关闭浏览器
driver.quit()