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是: 百度新闻搜索——全球最大的中文新闻平台
selenium测试(Java)--关闭窗口(二十)的更多相关文章
- Java IO(二十) PrintStream 和 DataOutputStream 异同
Java IO(二十) PrintStream 和 DataOutputStream 异同 一.相同点 都是继承与FileOutputStream,用于包装其它输出流. 二.不同点 (一).Print ...
- Java开发学习(二十五)----使用PostMan完成不同类型参数传递
一.请求参数 请求路径设置好后,只要确保页面发送请求地址和后台Controller类中配置的路径一致,就可以接收到前端的请求,接收到请求后,如何接收页面传递的参数? 关于请求参数的传递与接收是和请求方 ...
- Java开发学习(二十六)----SpringMVC返回响应结果
SpringMVC接收到请求和数据后,进行了一些处理,当然这个处理可以是转发给Service,Service层再调用Dao层完成的,不管怎样,处理完以后,都需要将结果告知给用户. 比如:根据用户ID查 ...
- Java开发学习(二十八)----拦截器(Interceptor)详细解析
一.拦截器概念 讲解拦截器的概念之前,我们先看一张图: (1)浏览器发送一个请求会先到Tomcat的web服务器 (2)Tomcat服务器接收到请求以后,会去判断请求的是静态资源还是动态资源 (3)如 ...
- Java并发(二十二):定时任务ScheduledThreadPoolExecutor
需要在理解线程池原理的基础上学习定时任务:Java并发(二十一):线程池实现原理 一.先做总结 通过一个简单示例总结: public static void main(String[] args) { ...
- Java开发学习(二十二)----Spring事务属性、事务传播行为
一.事务配置 上面这些属性都可以在@Transactional注解的参数上进行设置. readOnly:true只读事务,false读写事务,增删改要设为false,查询设为true. timeout ...
- Java开发学习(二十四)----SpringMVC设置请求映射路径
一.环境准备 创建一个Web的Maven项目 参考Java开发学习(二十三)----SpringMVC入门案例.工作流程解析及设置bean加载控制中环境准备 pom.xml添加Spring依赖 < ...
- Java并发(二十):线程本地变量ThreadLocal
ThreadLocal是一个本地线程副本变量工具类. 主要用于将私有线程和该线程存放的副本对象做一个映射,各个线程之间的变量互不干扰,在高并发场景下,可以实现无状态的调用,特别适用于各个线程依赖不同的 ...
- Java学习笔记二十八:Java中的接口
Java中的接口 一:Java的接口: 接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明.一个类通过继承接口的方式,从而来继承 ...
- Java从零开始学二十九(大数操作(BigIntger、BigDecimal)
一.BigInteger 如果在操作的时候一个整型数据已经超过了整数的最大类型长度long的话,则此数据就无法装入,所以,此时要使用BigInteger类进行操作. 不可变的任意精度的整数.所有操作中 ...
随机推荐
- 将mysql非分区表转换为分区表(转)
查看表的分布状况mysql> select count(*) from justin;+----------+| count(*) |+----------+| 5845246 |+---- ...
- Testbench
作者:桂. 时间:2017-08-15 07:11:50 链接:http://www.cnblogs.com/xingshansi/p/7363048.html 前言 Testbench主要用于mo ...
- 深入mysql “ON DUPLICATE KEY UPDATE” 语法的分析
本篇文章是对mysql “ON DUPLICATE KEY UPDATE”语法进行了详细的分析介绍,需要的朋友参考下. mysql “ON DUPLICATE KEY UPDATE” 语法 如果在IN ...
- [k8s]如何处理dockerfile无expose情况下在k8s里暴漏访问
做镜像时候忘记expose端口了, 或者要做一个通用的镜像, expose端口不固定, 又要在k8s环境里跑并暴漏服务访问,怎么破? 实际上: yaml的 ports: - containerPort ...
- 【Android】第18章 位置服务和手机定位—本章示例主界面
分类:C#.Android.VS2015: 创建日期:2016-03-04 一.简介 目前,基于位置的服务发展迅速,已涉及到商务.医疗.定位.追踪.敏感区域警告.工作和生活等各个方面.定位服务融合了G ...
- Fragment里面的ListView的item点击没反应
近期做一个消息列表,发现fragment的listview载入消息出来后,每条消息都点击不了.经过询问和查下已解决 开发中非经常见的一个问题,项目中的listview不不过简单的文字,经常须要自定义l ...
- 【RapidIO相关】DSP与FPGA通信
TI参考链接: http://www.ti.com.cn/general/cn/docs/gencontent.tsp?contentId=50741 ------------------------ ...
- How to add elements to a List in Scala
Scala List FAQ: How do I add elements to a Scala List? This is actually a trick question, because yo ...
- vue2.0的ajax
Vue 原本有一个官方推荐的 ajax 插件 vue-resource,但是自从 Vue 更新到 2.0 之后,官方就不再更新 vue-resource 目前主流的 Vue 项目,都选择 axios ...
- VC++ 遍历目录
遍历文件目录,即把一个目录里的文件名都取出来.本文是CFileFind类的使用实例的笔记.下面的程序是从一个目录出发,把这个目录里的所有成员按着层次输出. 代码如下: void TravelFolde ...