有时候我们在测试一个 web 应用时会出现多个浏览器窗口的情况,在 selenium1.0 中这个问题比较难
处理。webdriver 提供了相关相方法可以很轻松的在多个窗口之间切换并操作不同窗口上的元素。
图 3.10
要想在多个窗口之间切换,首先要获得每一个窗口的唯一标识符号(句柄) 。通过获得的句柄来区别
分不同的窗口,从而对不同窗口上的元素进行操作。
#coding=utf-8
from selenium import webdriver
import time
driver = webdriver.Firefox()
driver.get("http://www.baidu.com/")
#获得当前窗口
nowhandle=driver.current_window_handle
#打开注册新窗口
driver.find_element_by_name("tj_reg").click()
#获得所有窗口
allhandles=driver.window_handles
#循环判断窗口是否为当前窗口
for handle in allhandles:
if handle != nowhandle:
driver.switch_to_window(handle)
print 'now register window!'
#切换到邮箱注册标签
driver.find_element_by_id("mailRegTab").click()
time.sleep(5)
driver.close()
#回到原先的窗口
driver.switch_to_window(nowhandle)
driver.find_element_by_id("kw").send_keys(u"注册成功!")
time.sleep(3)
driver.quit()
处理过程:
这个处理过程相比我们前面的元素操作来说稍微复杂一些,执行过程为:首选通过 nowhandle 获得当
前窗口(百度首页)的句柄;然后,打开注册窗口(注册页) ;通过 allhandles 获得所有窗口的句柄;对所
有句柄进行循环遍历;判断窗口是否为 nowhandle(百度首页) ,如果不是则获得当前窗口(注册页)的句
柄;然后,对注册页上的元素进行操作。最后,回返到首页。
为了使执行过程更多更容易理解,在切换到注册页时,打印了'now register window!'一条信息;切换回
百度首页时,我们在输入框输入了“注册成功! ” 。注意,我们在切换到注册页时,只是切换了一下邮箱注
册标签,如果要直执行注册过程还需要添加更多的操作步骤。
在本例中所有用到的新方法:
current_window_handle
获得当前窗口句柄
window_handles
返回的所有窗口的句柄到当前会话
switch_to_window()
用于处理多窗口操作的方法,与我们前面学过的 switch_to_frame() 是类似,switch_to_window()用于
处理多窗口之前切换,switch_to_frame() 用于处理多框架的切换。
close()
如果你足够细心会发现我们在关闭“注册页”时用的是 close()方法,而非 quit();close()用于关闭当前
窗口,quit()用于退出驱动程序并关闭所有相关窗口。
相关文章
- 转:python webdriver API 之分页处理
- 转:python webdriver API 之定位一组对象
- 转:python webdriver API 之操作测试对象
- 转:python webdriver API 之浏览器多窗口处理
- 转:python webdriver API 之控制浏览器滚动条
- 转:python webdriver API 之cookie 处理
- 转:python webdriver API 之简单对象的定位
- 转:python webdriver API 之 验证码问题
- 转:python webdriver API 之调用 JavaScript
- 转:python webdriver API 之 获取对象的属性