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是: 百度新闻搜索——全球最大的中文新闻平台

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

  1. Java IO(二十) PrintStream 和 DataOutputStream 异同

    Java IO(二十) PrintStream 和 DataOutputStream 异同 一.相同点 都是继承与FileOutputStream,用于包装其它输出流. 二.不同点 (一).Print ...

  2. Java开发学习(二十五)----使用PostMan完成不同类型参数传递

    一.请求参数 请求路径设置好后,只要确保页面发送请求地址和后台Controller类中配置的路径一致,就可以接收到前端的请求,接收到请求后,如何接收页面传递的参数? 关于请求参数的传递与接收是和请求方 ...

  3. Java开发学习(二十六)----SpringMVC返回响应结果

    SpringMVC接收到请求和数据后,进行了一些处理,当然这个处理可以是转发给Service,Service层再调用Dao层完成的,不管怎样,处理完以后,都需要将结果告知给用户. 比如:根据用户ID查 ...

  4. Java开发学习(二十八)----拦截器(Interceptor)详细解析

    一.拦截器概念 讲解拦截器的概念之前,我们先看一张图: (1)浏览器发送一个请求会先到Tomcat的web服务器 (2)Tomcat服务器接收到请求以后,会去判断请求的是静态资源还是动态资源 (3)如 ...

  5. Java并发(二十二):定时任务ScheduledThreadPoolExecutor

    需要在理解线程池原理的基础上学习定时任务:Java并发(二十一):线程池实现原理 一.先做总结 通过一个简单示例总结: public static void main(String[] args) { ...

  6. Java开发学习(二十二)----Spring事务属性、事务传播行为

    一.事务配置 上面这些属性都可以在@Transactional注解的参数上进行设置. readOnly:true只读事务,false读写事务,增删改要设为false,查询设为true. timeout ...

  7. Java开发学习(二十四)----SpringMVC设置请求映射路径

    一.环境准备 创建一个Web的Maven项目 参考Java开发学习(二十三)----SpringMVC入门案例.工作流程解析及设置bean加载控制中环境准备 pom.xml添加Spring依赖 < ...

  8. Java并发(二十):线程本地变量ThreadLocal

    ThreadLocal是一个本地线程副本变量工具类. 主要用于将私有线程和该线程存放的副本对象做一个映射,各个线程之间的变量互不干扰,在高并发场景下,可以实现无状态的调用,特别适用于各个线程依赖不同的 ...

  9. Java学习笔记二十八:Java中的接口

    Java中的接口 一:Java的接口: 接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明.一个类通过继承接口的方式,从而来继承 ...

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

    一.BigInteger 如果在操作的时候一个整型数据已经超过了整数的最大类型长度long的话,则此数据就无法装入,所以,此时要使用BigInteger类进行操作. 不可变的任意精度的整数.所有操作中 ...

随机推荐

  1. (一)RocketMq入门之安装运行

    一.几个重要的地址 Git地址:https://github.com/apache/incubator-rocketmq 编译好的文件:https://rocketmq.incubator.apach ...

  2. C# POST与参数的字符串格式

    参数拼接方法:&  类似url参数.然后转化为字节型 string postdate = "Submit=" + Submit + "&dopost=&q ...

  3. php-fpm 启动参数及重要配置详解(转)

    约定几个目录 /usr/local/php/sbin/php-fpm /usr/local/php/etc/php-fpm.conf /usr/local/php/etc/php.ini 一,php- ...

  4. win7上安装theano keras深度学习框架

    近期在学习深度学习,需要在本机上安装keras框架,好上手.上网查了一些资料,弄了几天今天终于完全搞好了.本次是使用GPU进行加速,使用cpu处理的请查看之前的随笔keras在win7下环境搭建 本机 ...

  5. MongoDB索引类型

    与关系型数据库一样,合理的使用索引可以大幅提高MongoDB的查询效率,本文介绍基础索引.复合索引.文档索引等几种常用索引的使用. 1. 基础索引与复合索引 1.1 基础索引 创建索引时,可以是一个集 ...

  6. unity Input.GetAxis和Input.GetAxisRaw

    float h = Input.GetAxis("Horizontal") ;//h range from -1 to 1 float v = Input.GetAxis(&quo ...

  7. JAX-RS(REST Web Services)2.0 can not be installed: One or more constraints have not been satisfied

    eclipse出错: JAX-RS(REST Web Services)2.0 can not be installed: One or more constraints have not been ...

  8. javascript中字符串与数组互转的方法分享

    说明:1.join()方法:用于把数组中的所有元素放入一个字符串,元素是通过指定的分隔符进行分隔的.指定分隔符方法join("$");其中$可以是任意字符2.split()方法:用 ...

  9. 用javascript获得地址栏参数的两种方法

    javascript获得地址栏参数. 方法1: <script language="JavaScript"> //取地址栏参数 <!-- function Req ...

  10. 网站的PV UV IP---网站常见软件性能

    IP,衡量不同时间段的上网人数.00:00-24:00内相同的地址被计算一次.例:日300W IP,至少300W人访问PV,衡量页面受欢迎程度.每刷新一次,被记录一次(刷pv),网站被访问的页面的数量 ...