频道栏目
首页 > 资讯 > 其他综合 > 正文

selenium多窗口切换教程

18-07-25        来源:[db:作者]  
收藏   我要投稿

有时候需要在不同的窗口切换,从而操作不同的窗口上的元素。在 selenium1.0 中这个问题比较难处理。
但 WebDriver 提供了 switch_to_window()方法可以切换到任意的窗口。

这里以百度首页与注册页为例,演示在不同窗口切换。

from selenium import webdriver
driver = webdriver.Firefox()
driver.implicitly_wait(10)
driver.get("http://www.baidu.com")
#获得百度搜索窗口句柄
sreach_windows= driver.current_window_handle
driver.find_element_by_link_text(u'登录').click()
driver.find_element_by_link_text(u"立即注册").click()
#获得当前所有打开的窗口的句柄
all_handles = driver.window_handles
#进入注册窗口
for handle in all_handles:
    if handle != sreach_windows:
        driver.switch_to_window(handle)
        print 'now register window!'
        driver.find_element_by_name("account").send_keys('username')
        driver.find_element_by_name('password').send_keys('password')
        #……
#进入搜索窗口
for handle in all_handles:
    if handle == sreach_windows:
        driver.switch_to_window(handle)
        print 'now sreach window!'
        driver.find_element_by_id('TANGRAM__PSP_2__closeBtn').click()
        driver.find_element_by_id("kw").send_keys("selenium")
        driver.find_element_by_id("su").click()
        time.sleep(5)
driver.quit()

整个脚本的处理过程:首先打开百度首页,通过 current_window_handle 获得当前窗口的句柄,并给变
量 sreach_handle。接着打开登录弹窗,在登录窗口上点击“立即注册”从而打开新的注册窗口。通过
window_handles 获得当前打开的所窗口的句柄,赋值给变量 all_handles。
第一个循环遍历 all_handles,如果 handle 不等于 sreach_handle,那么一定是注册窗口,因为脚本执行
只打开的两个窗口。所以,通过 switch_to_window()切换到注册页进行注册操作。第二个循环类似,不过
这一次判断如果 handle 等于 sreach_handle,那么切换到百度搜索页,关闭之前打开的登录弹窗,然后时行
搜索操作。
在本例中所有用到的新方法:
current_window_handle 获得当前窗口句柄
window_handles 返回的所有窗口的句柄到当前会话
switch_to_window()
用于切换到相应的窗口,与上一节的 switch_to_frame() 是类似,前者用于不同窗口的切换,后者用于
不同表单之间的切换。

相关TAG标签
上一篇:rsync服务端配置、客户端部署结合sersync实时同步的步骤教程
下一篇:linux中cache占用多的原因和清理cache的方法教程
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站