摘要: 版权声明:本文为博主原创文章,转载请注明出处。


  在页面操作过程中有时候点击某个链接会弹出新的窗口,这时我们如果需要操作新打开的页面,就需要将主机切换到新打开的窗口上再进行操作,比如博客园精华页的精华博文,每点击一篇就会打开一个浏览器窗口。WebDriver 提供了 switchTo().window()方法可以实现在不同的窗口之间切换。

方法

说明

switchTo().window()

原型

WebDriver window(java.lang.String nameOrHandle)

参数

nameOrHandle:WebDriver 返回的窗口或句柄的名称;

通过 getWindowHandle ()获取;

作用

切换到具有给定名称/句柄的窗口。

用法

driver.switchTo().window( nameOrHandle );

异常

NoSuchWindowException-如果找不到窗口

getWindowHandle

原型

java.lang.String getWindowHandle();

作用

返回此窗口中唯一标识此驱动程序实例中的不透明句柄。

getWindowHandles

原型

java.util.Set<java.lang.String> getWindowHandles()

返回值

Set集合,可以参考Set容器的相关方法,对其进行操作;

  在如下的测试代码中,我们登录博客园,打开博客园的精华页面,依次进入前两篇精华博文,再分别定位到这两篇博文的“评论区”,输入“Test————SwitchTo()方法”测试多窗口的切换,但为维持环境和谐,不进行评论提交操作;

package com.SeleniumLib.jase;

import java.util.List;
import java.util.Set; import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver; public class SwitchTo {
public static void main(String[]args) throws InterruptedException{ WebDriver driver;
System.setProperty("webdriver.chrome.driver","D:/selenium-java-3.5.3/chromedriver.exe"); //chromedriver驱动的本地存放路径
driver = new ChromeDriver(); /*多窗口切换————测试整体流程:打开cnblogs精华页,依次进入前两篇精华博文,再分别定位到这两篇博文的“评论区”(为维持环境和谐,暂不进行评论提交操作)*/
driver.get("https://passport.cnblogs.com/user/signin?ReturnUrl=https%3A%2F%2Fwww.cnblogs.com%2F");
driver.findElement(By.id("input1")).sendKeys("天使未必在场"); //博客园登陆名
driver.findElement(By.id("input2")).sendKeys("***"); //博客园登录密码
driver.findElement(By.id("signin")).click();
Thread.sleep(2000); //需要等待几s;
driver.get("https://www.cnblogs.com/pick/"); //跳转到"精华"页面;
String JHWindowHandle = driver.getWindowHandle(); //获取“精华”页面的窗口句柄
System.out.println("JHWindowHandle :"+JHWindowHandle); //依次打开前两篇精华博文;
List<WebElement> elements = driver.findElements(By.className("titlelnk")); //获取所有的精华博文;
for(int i=0; i < 2;++i) //控制打开博文的个数
{
elements.get(i).click(); //打开第【i+1】篇博文;
Thread.sleep(2000);
} //对上述打开的两篇博文输入“评论”但不提交评论;
Set<String> Set = driver.getWindowHandles(); //获取所有已经打开的窗口句柄;会获取到三个=精华主页+2篇博文;
int size = Set.size(); //获取打开窗口的个数
int i = 0;
System.out.println("该测试代码打开的窗口个数: "+size);
for (String WindowHandles : Set)
{
System.out.println("WindowHandle["+i+"] = "+WindowHandles);
driver.switchTo().window(WindowHandles);
if(!WindowHandles.equals(JHWindowHandle)) //非精华主页,则是两篇博文中的其中一篇,可以在评论区进行“评论”;
{
System.out.println("CurrentUrl:"+driver.getCurrentUrl());
driver.findElement(By.id("tbCommentBody")).sendKeys("Test————SwitchTo()方法"); //仅输入不提交;
//Thread.sleep(2000);
}
++i;
} System.out.println("end selenium");
//driver.close();
}
}

Selenium_WebDriver_多窗口切换的更多相关文章

  1. Qt界面编程之多窗口切换

    1.基础知识 信号和槽 信号和槽都是函数,用来完成信号间的协同操作 2.多窗口切换实例       功能 实现登录和重新登录功能 组成 登录界面 和主窗体界面 3.源代码提供  

  2. selenium测试(Java)--多窗口切换(十三)

    selenium测试(Java)--多窗口切换(十三) 如果遇到点击按钮或链接后出现新窗口的情况,就需要使用窗口切换的方法. 本例中就是先打开百度搜索界面,然后利用js打开一个百度新闻界面,然后通过s ...

  3. eclipse中的窗口切换快捷键

    Ctrl+Shift+F6 很简单,如果以后改用IDEA的话就没用了,但这个窗口切换确实很复杂,看起来也操作比较快.

  4. selenium多个窗口切换

    浏览器里面支持多窗口打开,例如这样: html里面写了: target="_blank" 造成新打开一个窗口,但是selenium不会自动跳转到新的串口,需要自己切换: # 你打开 ...

  5. 在C#里实现各种窗口切换特效,多达13种特效

    原文:http://www.cnblogs.com/clayui/archive/2011/06/28/2092126.html 预览:   下载 这次clayui给大家带来了比较实用的东西,因为时间 ...

  6. Python3+Selenium2完整的自动化测试实现之旅(四):Selenium-webdriver操作浏览器、Cookie、鼠标键盘、警示框、设置等待时间、多窗口切换

    本篇学习总结webdriver模块操作浏览器.Cookie.鼠标键盘.警示框.设置等待时间.多窗口切换等方法的使用 1    浏览器控制 Selenium-webdriverAPI提供了对页面元素定位 ...

  7. Selenium 3----定位一组元素+多表单切换+多窗口切换

    定位一组元素 和定位单个元素类似,WebDriver提供了8种用于定位一组元素的方法.定位一组元素的方法与定位单个元素的方法类似,唯一的区别是在单词element后面多了一个s表示复数. find_e ...

  8. qt布局管理-缩放、多窗口切换

    关于缩放的布局 所有控件要求与主窗口同时缩放,那么在所有控件设置好布局后,最后点击最外侧的主控件,选择水平布局或者垂直布局即可. 另外每个空间的属性可更改,如SizePolicy用于设置空间是否可缩放 ...

  9. Python3 Selenium多窗口切换

    Python3 Selenium多窗口切换 以腾讯网(http://www.qq.com/)为例,打开腾讯网,点击新闻,打开腾讯新闻,点击新闻中第一个新闻链接. 在WebDriver中封装了获取当前窗 ...

随机推荐

  1. TypeScript笔记 1--环境搭建

    TypeScript是什么 Typescript是JavaScript的超集,支持ES6特性并且提供了类型系统,可以编译成Javascript.是微软开发且已经在github上开源. ES6(ES20 ...

  2. 关于Struts传递json给easyui的随笔

    今天在公司写测试代码,由于公司用的是ssh框架做的商城项目,我想先实现下简单的增删改查,奈何没有很好的后台页面(毕竟不能测试代码直接在他的项目里改啊) 所以想到了淘淘商城中有这个后台的管理页面,打算一 ...

  3. 如何更改Linux的ssh端口

    1. 修改/etc/ssh/sshd_config里的Port字段 Port 22改为Port 1000(你自定义的端口) 2. 重启sshd服务 #service sshd restart

  4. Servlet&&Jsp 概述

    主题 Servlet的作用 构建动态网页 Servlet代码初探 Servlet与其他技术的对比 Jsp的作用 Servlet的作用 Servlet是在web服务器或应用服务器上用来动态生成html的 ...

  5. vue-cli的webpack模版项目配置解析-build/dev-server.js

    我们在使用vue-cli搭建vuejs项目(Vuejs实例-01使用vue-cli脚手架搭建Vue.js项目)的时候,会自动生成一系列文件,其中就包含webpack配置文件.我们现在来看下,这些配置到 ...

  6. OpenGL进行简单的通用计算实例

    博主作为OpenGL新手,最近要用OpenGL进行并行的数据计算,突然发现这样的资料还是很少的,大部分资料和参考书都是讲用OpenGL进行渲染的.好不容易找到一本书<GPGPU编程技术,从Ope ...

  7. Apache Commons介绍(转载)

    一.Commons BeanUtils说明:针对Bean的一个工具集.由于Bean往往是有一堆get和set组成,所以BeanUtils也是在此基础上进行一些包装. 二.Commons CLI说明:这 ...

  8. JS中获取session中传过来的值对象

    摘录自:http://www.360doc.com/content/11/0316/13/5790498_101627263.shtml 把某一对象置于session范围内,并在JSP页面中提取ses ...

  9. 在Word2010文档中显示域代码而非域值

    当Word2010文档中含有域内容时,默认情况下显示域值,这样可以使插入的域内容清晰明了.用户可以根据需要选择显示域代码或显示域值,操作步骤如下所述: 步骤/方法 第1步,打开Word2010文档窗口 ...

  10. java —— equals 与 ==

    equals 众所周知,java 中的所有的类都继承自 Object 这个超类 ,他就是Java所有类的父类或祖先类,Object类里面有一个equals方法,并且提供了默认的实现,如下所示. pub ...