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(); 
        }
    }
  • 相关阅读:
    Tomcat6.0的Thisisverylikelytocreateamemoryleak异常
    一个不错的能将HTML表格导出为excel,pdf等的jquery插件
    关于tomcat8在windows2008下高并发下问题的解决方案
    应用部署到JBOSS上遇到的问题
    [置顶] 将项目从tomcat 迁移到JBoss
    struts2 if标签示例
    用Java集合中的Collections.sort方法对list排序的两种方法
    SAP 关于标准成本、计划成本、目标成本、实际成本
    “癌症村”里的“净水神器”
    iis虚拟目录引发的路径问题
  • 原文地址:https://www.cnblogs.com/xpp142857/p/7576922.html
Copyright © 2011-2022 走看看