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()类似,前者用于不同窗口的切换, 后者用于不同表单之间的切换。
posted @ 2020-09-15 17:02  裴敏儿  阅读(319)  评论(0编辑  收藏  举报