zoukankan      html  css  js  c++  java
  • Selenium 2自动化测试实战16(多窗口切换)

    一、多窗口切换

    在页面操作过程中有时候点击某个链接会弹出新的窗口,这时就需要主机切换到新打开的窗口上进行操作。WebDriver提供了switch_to.window()方法。可以实现在不同的窗口之间切换。
    以百度和百度注册页为例,在两个窗口之间切换

    #coding:utf-8
    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
    import time
    
    driver=webdriver.Chrome()
    driver.implicitly_wait(10)
    driver.get("http://www.baidu.com")
    
    #获得百度搜索窗口句柄
    search_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 != search_windows:
            driver.switch_to_window(handle)
            print 'now register window!'
            driver.find_element_by_name("userName").send_keys('username')
            time.sleep(2)
    
    #回到搜索窗口
    for handle in all_handles:
        if handle==search_windows:
            driver.switch_to_window(handle)
            print 'now search window!'
            driver.find_element_by_id('TANGRAM__PSP_4__closeBtn').click()
            driver.find_element_by_id('kw').send_keys('selenium')
            driver.find_element_by_id('kw').send_keys(Keys.ENTER)
            time.sleep(2)
    
    driver.quit()
    

     

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

  • 相关阅读:
    JDK1.8(Java Development Kit)安装和环境变量配置
    excel用法
    vue后台管理系统介绍
    linux上配置用户级别的JDK的方法
    Oracle创建数据库
    Oracle创建表空间及用户
    关于Oracle 11g、客户端、服务端及plsql的关系简述
    plsql连接数据库的三种方式
    springboot使用配置文件的方式集成RabbitMQ
    activiti工作流入门学习
  • 原文地址:https://www.cnblogs.com/Rita-LJ/p/11573676.html
Copyright © 2011-2022 走看看