我们在做UI自动化时,不得不会遇到一些窗口跳转与弹框,在这种的时候如果不进行切换的话,继续执行脚本必然会报错,所以我们就需要用到切换窗口的方法。
selenium中主要是三种窗口Windows窗口、iframe窗口、alert窗口,前面已经介绍过iframe和alert弹窗的切换,本节只介绍切换windows窗口。
这类窗口也就是我们常说的句柄,句柄的切换是有必要的,我们自己手动在网页上从操作的话,产生新的句柄时浏览器会自动的帮我们跳转到最新的句柄处,但是我们在做UI自动化的时候,代码并不会帮我们自动的切换到最新的句柄,需要我们使用代码去进行切换
步骤:
1.获取当前所有的窗口
windows=driver.window_handles
2.切换到指定的窗口
driver.switch_to.window(windows[-1])
3.切回原来的窗口
driver.switch_to.window(windows[0])
4.获取当前窗口的句柄
driver.current_window_handle
示例代码
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.common.keys import Keys driver = webdriver.Chrome() driver.get("http://www.baidu.com")handles=driver.window_handles driver.find_element(By.ID, "kw").send_keys("腾讯课堂") driver.find_element(By.ID, "kw").send_keys(Keys.ENTER)
以上的代码脚本,就会产生一个新的Windows窗口
我们如果直接去执行下一步操作的话,会报错的,所以我们需要先跳转到新的窗口才行
需要加上以下代码:
WebDriverWait(driver,10).until(EC.new_window_is_opened(handles))#等待新窗口出现
windows = driver.window_handles # 获取该会话所有的句柄 driver.switch_to.window(windows[-1]) # 跳转到最新的句柄
然后我们就可以在这个窗口里面进行新的操作了
注意:等待条件new_window_is_opened(handles)中是根据当前句柄数的变化来判断的,所以老的handles必须在窗口新增前就定义。
来源:https://www.cnblogs.com/123blog/p/12482933.html