浏览器多窗口操作
有时候我们在测试一个web应用的时候会出现多个浏览器窗口的情况,webdriver提供了相应的解决方案,如下:首先要获得每一个窗口的唯一标识符号(句柄),通过获得的句柄来区分不同的窗口,从而对不同窗口上的元素进行操作。
句柄:
操作系统给每一个窗口的ID值,每次打开浏览器窗口都会随机生成不同句柄;在selenium中可以通过方法获取句柄
current_handle = driver.current_window_handle # 获取当前窗口句柄值
handles = driver.window_handles # 获取浏览器目前所有窗口句柄
driver.switch_to.window( new_handle ) # 切换到新的窗口句柄
代码如下:
切换句柄有多个写法,推荐使用写法四
import os import time from selenium import webdriver from selenium.webdriver.common.by import By current_path = os.path.dirname(os.path.abspath(__file__)) # 当前路径 driver_path = os.path.join(current_path,'../webdriver/chromedriver.exe') # driver路径 pages_path = os.path.join(current_path,'../pages/element_samples.html') # 本地网页路径 driver = webdriver.Chrome(executable_path=driver_path) # Firefox,Ie等 driver.get('file://%s'%pages_path) # 本地网页打开file:// 打开部署好的站点http:// # 句柄:操作系统给每一个窗口的ID值,在selenium中可以通过方法获取句柄 # 每次打开浏览器窗口都会随机生成不同句柄 current_handle = driver.current_window_handle # 获取当前窗口句柄值 print( current_handle ) driver.find_element(By.XPATH,'//option[text()="开封教育网"]').click() time.sleep(2) # 写法一 handles = driver.window_handles # 获取浏览器目前所有窗口句柄 new_handle = handles[-1] # 一般新句柄是在列表的最后,可以用下标 -1 获取 driver.switch_to.window( new_handle ) # 切换到新的窗口句柄 driver.find_element(By.XPATH,'//a[text()="脱贫攻坚"]').click() # 写法二 handles = driver.window_handles # 获取浏览器目前所有窗口句柄 handles.remove( current_handle ) # 删除原先句柄 new_handle_01 =handles[0] # 在全部句柄中移除之前的句柄,只剩下新的放在列表中 driver.switch_to.window( new_handle_01 ) # 切换到新的窗口句柄 driver.find_element(By.XPATH,'//a[text()="脱贫攻坚"]').click() # 写法三 handles = driver.window_handles # 获取浏览器目前所有窗口句柄 new_handle_02 = None for handle in handles: # 遍历所有窗口句柄 if handle != current_handle: # 如果句柄不等于当前的句柄,则代表是新的句柄 new_handle_02 = handle break driver.switch_to.window( new_handle_02 ) # 切换到新的窗口句柄 driver.find_element(By.XPATH,'//a[text()="脱贫攻坚"]').click() # 写法四 (推荐使用) # 根据网页标题跳转 / 根据url地址跳转 handles = driver.window_handles # 获取浏览器目前所有窗口句柄 for handle in handles: driver.switch_to.window(handle) if driver.title == "开封市教育体育局": # 根据网页标题跳转 break # if driver.current_url == "http://jtj.kaifeng.gov.cn/": # 根据url地址跳转 # break driver.find_element(By.XPATH,'//a[text()="脱贫攻坚"]').click()