51Testing软件测试论坛

标题: WebDriver API(2)多窗口切换 [打印本页]

作者: 测试积点老人    时间: 2018-12-6 14:46
标题: WebDriver API(2)多窗口切换

在页面操作过程中有时候点击某个链接会弹出新的窗口,这时就需要主机切换到新打开的窗口上进行
操作。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,那么切换到百度搜索页,然后进行搜索操作。







欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2