selenium多窗口之间切换

1、多窗口的切换

  在自动化测试过程中有时候会出现多窗口的情况,脚本打开的窗口光标默认在第一个窗口上,此时需要定位第二个或者其他窗口就需要先切换窗口再定位(依据窗口的句柄切换,句柄是窗口唯一标识,相当于人的身份证)

  获取多窗口方法:driver.window_handles(此方法返回的是一个句柄列表)

# 导入包
from selenium import webdriver
import time
# 创建一个浏览器对象,访问百度
driver = webdriver.Firefox()
driver.get('http://www.baidu.com')

# 打印当前句柄、标题、网址
print('当前句柄:',driver.window_handles,'
当前网址:',driver.current_url,'
浏览器标题:',driver.title)
# 定位hao123
hao = driver.find_element_by_css_selector('a.mnav:nth-child(2)')
# 点击
hao.click()

# 保存当前打开的网页句柄
handles_list = driver.window_handles

# 打开浏览器后自动默认光标在第一个页面,若不做切换动作,会一直默认在第一个打开的窗口上
# 打印当前句柄、标题、网址(可见结果与上面结果相同)
print('当前句柄:',driver.window_handles,'
当前网址:',driver.current_url,'
浏览器标题:',driver.title)

# 切换窗口后再打印句柄等
driver.switch_to.window(handles_list[1])
print('当前句柄:',driver.window_handles,'
当前网址:',driver.current_url,'
浏览器标题:',driver.title)

# 定位新窗口的元素,若成功定位,则在新窗口上,否则在旧窗口上
try:
    # 定位新窗口的元素
    driver.find_element_by_css_selector('a.g-gc:nth-child(2)')
    print('在新窗口','
浏览器标题:',driver.title,'
网址:',driver.current_url)
except:
    print('旧窗口旧旧旧旧','
浏览器标题:',driver.title,'
网址:',driver.current_url)
# 关闭浏览器
driver.quit()

运行结果:

当前句柄: ['{12f1218e-8701-4e92-8d1b-e91de3c06654}']
当前网址: https://www.baidu.com/
浏览器标题: 百度一下,你就知道
当前句柄: ['{12f1218e-8701-4e92-8d1b-e91de3c06654}', '{10b3404c-4fc5-4014-90fe-a82a83efa39c}']
当前网址: https://www.baidu.com/
浏览器标题: 百度一下,你就知道
当前句柄: ['{12f1218e-8701-4e92-8d1b-e91de3c06654}', '{10b3404c-4fc5-4014-90fe-a82a83efa39c}']
当前网址: https://www.hao123.com/
浏览器标题: hao123_上网从这里开始
在新窗口
浏览器标题: hao123_上网从这里开始
网址: https://www.hao123.com/

结论:脚本打开浏览器多个页面时,会自动默认光标在第一个窗口上,若需要操作其他窗口,需要依靠句柄切换到窗口再操作页面

原文地址:https://www.cnblogs.com/will-wu/p/13466043.html