zoukankan      html  css  js  c++  java
  • 11.selenium之窗口切换

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

    import org.openqa.selenium.By;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.WebElement;
    import org.openqa.selenium.chrome.ChromeDriver;
    
    import java.util.Set;
    
    
    public class MailLogin {
    
        public static void main(String[] args) throws InterruptedException {
    
            WebDriver driver = new ChromeDriver();
            driver.get("http://www.126.com");
            //获得当前窗口句柄
            String search_handle = driver.getWindowHandle();
    
    
            WebElement xf = driver.findElement(By.xpath("//*[@id='loginDiv']/iframe"));
            driver.switchTo().frame(xf);
            driver.findElement(By.name("email")).clear();
            driver.findElement(By.name("email")).sendKeys("lovepeibenben");
            Thread.sleep(1000);
            driver.findElement(By.name("password")).clear();
            driver.findElement(By.name("password")).sendKeys("1a2b3c4d5e6gpei");
            Thread.sleep(1000);
            driver.findElement(By.id("dologin")).click();
            driver.switchTo().defaultContent();
    
            System.out.print(driver.getCurrentUrl());
            System.out.print(driver.getTitle());
            //获得所有窗口句柄
            Set<String> handles = driver.getWindowHandles();
    
            //判断是否为注册窗口, 并操作注册窗口上的元素
            for(String handle : handles){
                if (handle.equals(search_handle)==false){
                    //切换到注册页面
                    driver.switchTo().window(handle);
                    System.out.println("now register window!");
                    Thread.sleep(2000);
                    driver.findElement(By.linkText("设置")).click();
                    Thread.sleep(2000);
                    driver.findElement(By.linkText("常规设置")).click();
    
                    Thread.sleep(2000);
                    //关闭当前窗口
                    driver.close();
                }
                else {
                    Thread.sleep(2000);
                    driver.findElement(By.linkText("设置")).click();
                    Thread.sleep(2000);
                    driver.findElement(By.xpath("//*[@id="_mail_component_82_82"]/li[1]")).click();
    
                    Thread.sleep(2000);
                    //关闭当前窗口
                    driver.close();
                }
    
            }
    
            driver.quit();
        }
    }

    在本例中所涉及的新方法如下:

    • getWindowHandle(): 获得当前窗口句柄。
    • getWindowHandles(): 返回的所有窗口的句柄到当前会话。
    • switchTo().window(): 用于切换到相应的窗口,与上一节的switchTo().frame()类似,前者用于不同窗口的切换, 后者用于不同表单之间的切换。
  • 相关阅读:
    spring boot 在windows下安装为service(转)
    win7安装Anaconda+TensorFlow+配置PyCharm(转)
    IDEA中Spring boot配置热部署无效问题解决方式(转)
    WEB后台--基于Token的WEB后台登录认证机制(转)
    selenium之使用chrome浏览器测试(附chromedriver与chrome的对应关系表)(转)
    开源巨献:Google最热门60款开源项目(转)
    反射获取一个方法中的参数名(不是类型)(转)
    ELK原理与介绍(转)
    Linux下Redis的安装和部署(转)
    webpack+ES6+less开发环境搭建(转)
  • 原文地址:https://www.cnblogs.com/peiminer/p/13564896.html
Copyright © 2011-2022 走看看