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