selenium测试(Java)--多窗口切换(十三)
如果遇到点击按钮或链接后出现新窗口的情况,就需要使用窗口切换的方法。
切换窗口方法

本例中就是先打开百度搜索界面,然后利用js打开一个百度新闻界面,然后通过selenium提供的窗口切换方法切换窗口

1 package com.test.windows;
2
3 import java.util.Iterator;
4 import java.util.Set;
5
6 import org.openqa.selenium.By;
7 import org.openqa.selenium.JavascriptExecutor;
8 import org.openqa.selenium.WebDriver;
9 import org.openqa.selenium.firefox.FirefoxDriver;
10
11 public class WindowsSwitch {
12
13 public static void main(String[] args) {
14
15 WebDriver driver = new FirefoxDriver();
16 driver.get("http://www.baidu.com");
17 driver.manage().window().maximize();
18
19 String searchHandle = driver.getWindowHandle();
20 System.out.println("baidu search handle : " + searchHandle);
21
22 // 获取百度新闻的连接,然后利用js打开一个新的窗口
23 waitTime(3000);
24 String href = driver.findElement(By.cssSelector("[name=tj_trnews]")).getAttribute("href");
25 System.out.println("the link of news is : " + href);
26 JavascriptExecutor executor = (JavascriptExecutor) driver;
27 executor.executeScript("window.open('" + href + "')");
28
29 waitTime(3000);
30 Set<String> handles = driver.getWindowHandles();
31 Iterator iterator = handles.iterator();
32 Iterator iterator2 = handles.iterator();
33
34 // 进入百度新闻窗口,并获取title验证
35 waitTime(3000);
36 while (iterator.hasNext()) {
37 String h = (String) iterator.next();
38 if (h != searchHandle) {
39 driver.switchTo().window(h);
40 if (driver.getTitle().contains("百度新闻")) {
41 System.out.println("switch to news page successfully");
42 break;
43 } else {
44 continue;
45 }
46 }
47
48 }
49
50 // 返回百度首页
51 waitTime(3000);
52 /*
53 * 可以直接使用searchHandle来切换,也可以利用遍历来切换
54 * driver.switchTo().window(searchHandle);
55 * if(driver.getTitle().contains("百度一下")){
56 * System.out.println("switch to search page successfully");
57 * driver.findElement(By.cssSelector("#kw")).sendKeys(
58 * "switch successfully"); }
59 */
60 while (iterator2.hasNext()) {
61 String h = (String) iterator2.next();
62 if (searchHandle.equals(h)) {
63 driver.switchTo().window(h);
64 if (driver.getTitle().contains("百度一下")) {
65 System.out.println("switch to search page successfully");
66 driver.findElement(By.cssSelector("#kw")).sendKeys("switch successfully");
67 break;
68 } else {
69 continue;
70 }
71 }
72
73 }
74
75 waitTime(3000);
76 driver.quit();
77
78 }
79
80 static public void waitTime(int time) {
81
82 try {
83 Thread.sleep(time);
84 } catch (InterruptedException e) {
85 // TODO Auto-generated catch block
86 e.printStackTrace();
87 }
88 }
89
90 }
selenium测试(Java)--多窗口切换(十三)的更多相关文章
- selenium中的多窗口切换
在selenium中,我们会遇到一些问题,就是多窗口处理的问题,我们爬取的内容在一个新窗口上,这个时候,我们就需要先切换到这个新的窗口上,然后进行抓取内容. 如何切换呢? 首先,获取当前窗口句柄 1. ...
- selenium - switch_to.window() - 多窗口切换
在页面操作过程中有时候点击某个链接会弹出新的窗口,这时就需要主机切换到新打开的窗口上进行操作.WebDriver提供了switch_to.window()方法,可以实现在不同的窗口之间切换. 以百度首 ...
- python+selenium五:多窗口切换与获取句柄
from selenium import webdriverfrom selenium.webdriver.common.by import Byimport time driver = webdri ...
- selenium之实现多窗口切换到自己想要的窗口
#coding=utf-8 from selenium import webdriver import time from selenium.webdriver.support import expe ...
- 《手把手教你》系列技巧篇(二十三)-java+ selenium自动化测试-webdriver处理浏览器多窗口切换下卷(详细教程)
1.简介 上一篇讲解和分享了如何获取浏览器窗口的句柄,那么今天这一篇就是讲解获取后我们要做什么,就是利用获取的句柄进行浏览器窗口的切换来分别定位不同页面中的元素进行操作. 2.为什么要切换窗口? Se ...
- Selenium常用API的使用java语言之14-多窗口切换
在页面操作过程中有时候点击某个链接会弹出新的窗口, 这时就需要主机切换到新打开的窗口上进行操作.WebDriver提供了switchTo().window()方法可以实现在不同的窗口之间切换. 以百度 ...
- Selenium+Java(十一)Selenium窗口切换
前言: Selenium在当前页面调整到新页面时打开了新的窗口,此时就需要跳转到新的窗口去,需要把窗口进行切换. 获取窗口句柄方法: 获取所有: //获取所有窗口句柄,返回的是set类型 driver ...
- [selenium webdriver Java]处理弹出窗口
Selenium WebDriver测试弹出窗口,包括识别弹出窗口,将driver转到新的窗口,在新的串钩中执行而是步骤,然后再转换到最初的窗口. 通过名称(name)识别和处理: Selenium ...
- Python+Selenium学习--窗口切换及操作元素
场景 有时候我们在测试一个web 应用时会出现多个浏览器窗口的情况,在selenium1.0 中这个问题比较难处理.webdriver 提供了相关相方法可以很轻松的在多个窗口之间切换并操作不同窗口上的 ...
随机推荐
- 青蛙跳100级台阶算法,完整可运行,php版本
/* 算法题目 * 2016年4月11日16:11:08 * 一只青蛙,一次可以跳1步,或者2步,或者3步,现在要跳100级台阶,请问青蛙有多少种上100级台阶的跳法 * 1步的有$n 2步的有$m ...
- 2017技术核心——Spring
从毕业从事Java WEB开始到现在已差不多快5年时间了,一直使用的Spring相关的技术,其实最主要的是SpringMVC这一块.其实,一直停留在用的地步,并不知晓其原理,真正耐下心来去研究Spri ...
- pt-archiver使用
pt-archiver工具其实就是用来清理,归档数据用的 一.归档前的准备需要配置client字符集为utf-8,如果你用了utf-8的编码,防止归档数据为乱码[client]default-char ...
- ASP.NET Web API 2基于令牌的身份验证
基于令牌的认证 我们知道WEB网站的身份验证一般通过session或者cookie完成的,登录成功后客户端发送的任何请求都带上cookie,服务端根据客户端发送来的cookie来识别用户. WEB A ...
- Linux分区方案 (转)
以下是我的centOS6.2系统分区方案,做个记录,方便后续的参考. 根分区: >= 3G /boot (启动分区): 100M即可. /swap : 网上说是物理内存的两倍,实际随便你,看自己 ...
- Nodejs:precss模块 & autoprefixer模块
模块precss:可以通过他管理文件系统,文件的写入,删除等操作 模块autoprefixer: autoprefixer可以对sass处理过后的css再处理,解析CSS文件并且添加浏览器前缀到CSS ...
- sql笔记-group by 统计功能
--查询月销售量小于20的人员销售情况 SELECT C.Category, SUM(c.[Count]) AS CategorySum FROM test.dbo.Category c --WHER ...
- js事件模型与自定义事件
JavaScript 一个最简单的事件模型,需要有事件绑定与触发,还有事件删除. var eventModel = { list: {}, bind: function () { var args = ...
- javaScript的简单学习
JavaScript介绍 JavaScript跟java没半毛钱关系 JavaScript有三部分组成:ECMAScript,document object model,broswer object ...
- python多线程实现同时执行两个while循环
如果想同时执行两个while True循环,可以使用多线程threading来实现. 完整代码 #coding=gbk from time import sleep, ctime import thr ...