51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 1482|回复: 0
打印 上一主题 下一主题

WebDriver API(2)多窗口切换

[复制链接]
  • TA的每日心情
    擦汗
    3 天前
  • 签到天数: 527 天

    连续签到: 4 天

    [LV.9]测试副司令

    跳转到指定楼层
    1#
    发表于 2018-12-6 14:46:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    • switchTo().window() : 方法可以实现在不同的窗口之间切换;window参数为将要切换到的页面的句柄;
    • getWindowHandle():获得当前窗口句柄。
    • getWindowHandles():返回的所有窗口的句柄到当前会话。

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

    1. public static void main(String[] arge) throws InterruptedException{
    2.     WebDriver driver = new ChromeDriver();
    3.     driver.get("http://www.baidu.com");

    4.     String sreach_handle = driver.getWindowHandle();        //获得当前窗口句柄
    5.     System.out.println(sreach_handle);                      //打开百度注册窗口
    6.     driver.findElement(By.linkText("登录")).click();
    7.     Thread.sleep(3000);
    8.     driver.findElement(By.linkText("立即注册")).click();

    9.     Set<String> handles = driver.getWindowHandles();         //获得所有窗口句柄

    10.     for(String handle : handles){                          //判断是否为注册窗口,并操作注册窗口上的元素
    11.         if (handle.equals(sreach_handle)==false){
    12.             driver.switchTo().window(handle);                       //切换到注册页面
    13.             System.out.println("now register window!");
    14.             Thread.sleep(2000);
    15.             driver.findElement(By.name("account")).clear();
    16.             driver.findElement(By.name("account")).sendKeys("username");
    17.             driver.findElement(By.name("password")).sendKeys("password");
    18.             Thread.sleep(2000);
    19.             driver.close();                                        //关闭当前窗口
    20.         }
    21.     }

    22.     for(String handle : handles){                        //判断是否为百度首页,并操作首页上的元素
    23.         if (handle.equals(sreach_handle)){
    24.             driver.switchTo().window(handle);                //切换到百度搜索页面
    25.             Thread.sleep(2000);
    26.             driver.findElement(By.className("close-btn")).click();
    27.             System.out.println("now baidu sreach page!");
    28.             driver.findElement(By.id("kw")).sendKeys("webdriver");
    29.             driver.findElement(By.id("su")).click();
    30.             Thread.sleep(2000);
    31.         }
    32.     }
    33.     driver.quit();
    34. }
    复制代码

    脚本的执行过程:首先打开百度首页,通过 getWindowHandle()获得当前窗口的句柄,并赋值给变量sreach_handle。接着打开登录弹窗,在登录弹窗上单击“立即注册”,从而打开新的注册窗口。通过getWindowHandles()获得当前打开的所有窗口的句柄,并赋值给变量 handles。


    第一个循环遍历 handles,如果 handle 不等于 sreach_handle,那么一定是注册窗口,因为脚本执行过程中只打开两个窗口。所以,通过 switchTo().window()切换到注册页进行注册操作。第二个循环类似,不过这一次判断如果 handle 等于 sreach_handle,那么切换到百度搜索页,然后进行搜索操作。


    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-18 08:27 , Processed in 0.059504 second(s), 23 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表