selenium测试(Java)--关闭窗口(二十)

quit方法:退出相关的驱动程序和关闭所有窗口

close方法:关闭当前窗口

package com.test.closewindow;

import java.util.Iterator;
import java.util.Set;

import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

public class WindowsClose {

    public static void main(String[] args) {

        WebDriver driver = new FirefoxDriver();
        driver.get("http://www.baidu.com");
        driver.manage().window().maximize();

        String searchHandle = driver.getWindowHandle();
        String newsHandle = null;
        System.out.println("baidu search handle : " + searchHandle);

        // 获取百度新闻的连接,然后利用js打开一个新的窗口
        waitTime(3000);
        String href = driver.findElement(By.cssSelector("[name=tj_trnews]")).getAttribute("href");
        System.out.println("the link of news is : " + href);
        JavascriptExecutor executor = (JavascriptExecutor) driver;
        executor.executeScript("window.open(‘" + href + "‘)");

        waitTime(3000);
        Set<String> handles = driver.getWindowHandles();
        Iterator iterator = handles.iterator();
        Iterator iterator2 = handles.iterator();

        // 进入百度新闻窗口,并获取title验证
        waitTime(3000);
        while (iterator.hasNext()) {
            String h = (String) iterator.next();
            if (h != searchHandle) {
                driver.switchTo().window(h);
                if (driver.getTitle().contains("百度新闻")) {
                    System.out.println("switch to news page successfully");
                    newsHandle = driver.getWindowHandle();
                    break;
                } else {
                    continue;
                }
            }

        }

        // 返回百度首页
        waitTime(3000);
        /*
         * 可以直接使用searchHandle来切换,也可以利用遍历来切换
         * driver.switchTo().window(searchHandle);
         * if(driver.getTitle().contains("百度一下")){
         * System.out.println("switch to search page successfully");
         * driver.findElement(By.cssSelector("#kw")).sendKeys(
         * "switch successfully"); }
         */
        while (iterator2.hasNext()) {
            String h = (String) iterator2.next();
            if (searchHandle.equals(h)) {
                driver.switchTo().window(h);
                if (driver.getTitle().contains("百度一下")) {
                    System.out.println("switch to search page successfully");
                    driver.findElement(By.cssSelector("#kw")).sendKeys("switch successfully");
                    driver.close();// 只关闭百度首页
                    System.out.println("close search page successfully");
                    driver.switchTo().window(newsHandle);// 切换到百度新闻
                    System.out.println("当前的title是: " + driver.getTitle());// 获取title
                    waitTime(3000);
                    break;
                } else {
                    continue;
                }
            }

        }

        waitTime(3000);
        driver.quit();

    }

    static public void waitTime(int time) {

        try {
            Thread.sleep(time);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}

执行结果:

baidu search handle : {75749f9a-f6b7-4fe6-80ae-dd9e053dd577}
the link of news is : http://news.baidu.com/
switch to news page successfully
switch to search page successfully
close search page successfully
当前的title是: 百度新闻搜索——全球最大的中文新闻平台

时间: 2024-10-07 14:54:35

selenium测试(Java)--关闭窗口(二十)的相关文章

Java Web总结二十二投票系统

投票系统需求: (1)查询所有候选人基本信息 (2)查询某位候选人详细信息 (3)投票人登录和退出 (4)投票人限制1分钟之内重复投票 (5)投票人IP和最后投票时间查询 (6)阻止相同用户名二次在线登录 (7)票数条形显示和候选人头像处理 (8)显示投票人归属地 (9)热门候选人,即投票数最多 (10)后台管理员登录 可选需求: (11)查询.删除.更新.增加候选人详细信息 (12)与一个Listener,创建所有表格式和初始化数据 代码参见:day19/vote(此处不上传) Java We

Java Web总结二十Filter、装饰设计模式

一.Filter的部署--注册Filter <filter> <filter-name>testFitler</filter-name> <filter-class>org.test.TestFiter</filter-class> <init-param> <param-name>word_file</param-name> <param-value>/WEB-INF/word.txt</p

Java从零开始学二十九(大数操作(BigIntger、BigDecimal)

一.BigInteger 如果在操作的时候一个整型数据已经超过了整数的最大类型长度long的话,则此数据就无法装入,所以,此时要使用BigInteger类进行操作. 不可变的任意精度的整数.所有操作中,都以二进制补码形式表示 BigInteger(如 Java 的基本整数类型).BigInteger 提供所有 Java 的基本整数操作符的对应物,并提供 java.lang.Math 的所有相关方法.另外,BigInteger 还提供以下运算:模算术.GCD 计算.质数测试.素数生成.位操作以及一

Java从零开始学二十八(Math类和Random类)

一.Math概述 提供了常用的数学运算方法和两个静态常量E(自然对数的底数)和PI(圆周率) 二.常用方法 package com.pb.demo1; public class MathTest { public static void main(String[] args) { System.out.println("求平方根:" + Math.sqrt(9.0)); System.out.println("求两数的最大值:" + Math.max(10,30))

Java从零开始学二十二(集合Set接口)

一.Set接口的定义 Set接口也是Collection接口的子接口,但是与Collection或List接口不同的是,Set接口中不能加入重复的元素 Set接口的主要方法与Collection是一致的 Set接口的实例无法像List接口那样进行双向输出.不存在get方法使用Iterator接口来遍历集合 2个常用方法:hasNext方法表示判断是否还有元素可以迭代 next()方法:返回迭代的下一个元素 Set接口的常用子类 散列存放:HashSet 有序存放:TreeSet 二.使用SetH

Java从零开始学二十四点(集合工具类Collections)

一.Collections简介 在集合的应用开发中,集合的若干接口和若干个子类是最最常使用的,但是在JDK中提供了一种集合操作的工具类 —— Collections,可以直接通过此类方便的操作集合 二.Collections类的常用方法及常量 No. 方法 类型 描述 1 public static final List EMPTY_LIST 常量 返回一个空的List集合 2 public static final Set EMPTY_SET 常量 返回空的Set集合 3 public sta

Java从零开始学二十(Ubuntu下配置jdk)

一.下载 jdk:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 二.安装JDk 2.1.解压jdk 1.创建一个目录 [email protected]:/$ sudo mkdir /usr/local/develoment [sudo] password for ln0491: [email protected]-virtual-machine:/$ ls /usr/loc

Java学习系列(二十)Java面向对象之反射详解

转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/45289391 前言 今天讲讲Java中的反射.我们常见的反射多用于JDBC中的加载驱动程序Class.forName("com.mysql.jdbc.Driver");.Struts的MVC.Hibernate中的ORM.Spring中的IOC还有一些其他框架等等.那它有什么好处呢?它的好处就是能够动态的创建对象和编译且能够访问某个类中的所有(包括私有)属性方法及对象的属性方法

Java从零开始学二十(集合简介)

一.为什么需要集合框架 数组的长度是固定的,但是如果写程序时并不知道程序运行时会需要多少对象.或者需要更复杂的方式存储对象,---那么,可以使用JAVA集合框架,来解决这类问题 二.集合框架主要接口 No 接口 描述 1 Collection 是存放一组单值的最大接口,所谓的单值是指集合中的每个元素都是一个对象.一般很少会直接使用此接口直接操作. 2 List 是Collection接口的子接口,也是最常用的接口,此接口对Collection接口进行了大量的扩充,里面的内容是允许重复的. 3 S

Java从零开始学二十六(包装类)

一.包装类 包装类是将基本类型封装到一个类中.也就是将基本数据类型包装成一个类类型. java程序设计为每一种基本类型都提供了一个包装类.这些包装类就在java.lang包中.有8个包装类 二.包装类的构造方法和静态方法 2.1.第一种 public Type (type value) 其中首字母大写的Type表示包装类,小写的type表示基本类型 这个构造方法接收一个基本数据类型值,并创建一个与之相应的包装类. 可以使用new关键字将一个基本类型包装为一个对象 Integer intValue