zoukankan      html  css  js  c++  java
  • Selenium_WebDriver_多窗口切换

    摘要: 版权声明:本文为博主原创文章,转载请注明出处。


      在页面操作过程中有时候点击某个链接会弹出新的窗口,这时我们如果需要操作新打开的页面,就需要将主机切换到新打开的窗口上再进行操作,比如博客园精华页的精华博文,每点击一篇就会打开一个浏览器窗口。WebDriver 提供了 switchTo().window()方法可以实现在不同的窗口之间切换

    方法

    说明

    switchTo().window()

    原型

    WebDriver window(java.lang.String nameOrHandle)

    参数

    nameOrHandle:WebDriver 返回的窗口或句柄的名称;

    通过 getWindowHandle ()获取;

    作用

    切换到具有给定名称/句柄的窗口。

    用法

    driver.switchTo().window( nameOrHandle );

    异常

    NoSuchWindowException-如果找不到窗口

    getWindowHandle

    原型

    java.lang.String getWindowHandle();

    作用

    返回此窗口中唯一标识此驱动程序实例中的不透明句柄。

    getWindowHandles

    原型

    java.util.Set<java.lang.String> getWindowHandles()

    返回值

    Set集合,可以参考Set容器的相关方法,对其进行操作;

      在如下的测试代码中,我们登录博客园,打开博客园的精华页面,依次进入前两篇精华博文,再分别定位到这两篇博文的“评论区”,输入“Test————SwitchTo()方法”测试多窗口的切换,但为维持环境和谐,不进行评论提交操作;

    package com.SeleniumLib.jase;
    
    import java.util.List;
    import java.util.Set;
    
    import org.openqa.selenium.By;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.WebElement;
    import org.openqa.selenium.chrome.ChromeDriver;
    
    public class SwitchTo {
        public static void main(String[]args) throws InterruptedException{
            
            WebDriver   driver;    
            System.setProperty("webdriver.chrome.driver","D:/selenium-java-3.5.3/chromedriver.exe");   //chromedriver驱动的本地存放路径   
            driver = new ChromeDriver();
                  
    /*多窗口切换————测试整体流程:打开cnblogs精华页,依次进入前两篇精华博文,再分别定位到这两篇博文的“评论区”(为维持环境和谐,暂不进行评论提交操作)*/
            driver.get("https://passport.cnblogs.com/user/signin?ReturnUrl=https%3A%2F%2Fwww.cnblogs.com%2F"); 
            driver.findElement(By.id("input1")).sendKeys("天使未必在场"); //博客园登陆名
            driver.findElement(By.id("input2")).sendKeys("***");  //博客园登录密码
            driver.findElement(By.id("signin")).click();
            Thread.sleep(2000);   //需要等待几s;
            driver.get("https://www.cnblogs.com/pick/");   //跳转到"精华"页面;
            String JHWindowHandle = driver.getWindowHandle();  //获取“精华”页面的窗口句柄
            System.out.println("JHWindowHandle :"+JHWindowHandle); 
            
            //依次打开前两篇精华博文;
            List<WebElement> elements = driver.findElements(By.className("titlelnk"));  //获取所有的精华博文;
            for(int i=0; i < 2;++i)  //控制打开博文的个数
            {
                elements.get(i).click();   //打开第【i+1】篇博文;
                Thread.sleep(2000);
            }
            
            //对上述打开的两篇博文输入“评论”但不提交评论;
            Set<String> Set = driver.getWindowHandles();  //获取所有已经打开的窗口句柄;会获取到三个=精华主页+2篇博文;
            int size = Set.size(); //获取打开窗口的个数
            int i = 0;
            System.out.println("该测试代码打开的窗口个数: "+size); 
            for (String WindowHandles : Set)    
            {  
                System.out.println("WindowHandle["+i+"] = "+WindowHandles); 
                driver.switchTo().window(WindowHandles);
                if(!WindowHandles.equals(JHWindowHandle))   //非精华主页,则是两篇博文中的其中一篇,可以在评论区进行“评论”;
                {
                    System.out.println("CurrentUrl:"+driver.getCurrentUrl());
                    driver.findElement(By.id("tbCommentBody")).sendKeys("Test————SwitchTo()方法");  //仅输入不提交;
                    //Thread.sleep(2000);
                }
                ++i;
            }  
        
            System.out.println("end selenium");
            //driver.close(); 
        }
    }
  • 相关阅读:
    FZU 2150 Fire Game
    POJ 3414 Pots
    POJ 3087 Shuffle'm Up
    POJ 3126 Prime Path
    POJ 1426 Find The Multiple
    POJ 3278 Catch That Cow
    字符数组
    HDU 1238 Substing
    欧几里德和扩展欧几里德详解 以及例题CodeForces 7C
    Codeforces 591B Rebranding
  • 原文地址:https://www.cnblogs.com/xpp142857/p/7576922.html
Copyright © 2011-2022 走看看