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 提供了相关相方法可以很轻松的在多个窗口之间切换并操作不同窗口上的 ...
随机推荐
- 如何搭建开源code review gerrit服务器
搭建环境:Ubuntu 14.04 一.环境准备 1.Java环境 gerrit依赖,用于安装gerrit环境. 下载:jdk-7u79-linux-x64.tar.gz http://www.ora ...
- opengl中对glOrtho()函数的理解
glOrtho是创建一个正交平行的视景体. 一般用于物体不会因为离屏幕的远近而产生大小的变换的情况.比如,常用的工程中的制图等.需要比较精确的显示. 而作为它的对立情况, glFrustum则产生一个 ...
- 深入理解ANGULARUI路由_UI-ROUTER
最近在用 ionic写个webapp 看到几个demo中路由有好几种,搞的有点晕,查下资料研究下,做个笔记,其中大部分为摘抄别人的,做个说明免得被人吐槽. Angularjs ui-router - ...
- pdb调试技巧
1.先import pdb 在适当的位置加上pdb.set_trace(),在cmd中运行脚本,就可以看到调试的提示符 2.常用的调试命令 h(elp),会打印当前版本,pdb可用的命令,如果要查询某 ...
- js正则匹配的一个日常应用
应用实例 1 /** 将段落中的 \n 转换为 <p></p>, 规范存储 */ 2 function formatParagraphForStore(val) { 3 var ...
- LL(1)文法
<源程序>→<外部声明>|<外部声明><函数体> <外部申明>→<头文件><函数声明>|其他声明 <函数体&g ...
- WP8.1 C#代码 添加/获取Grid.ColumnDefinitions/RowDefinitions
WP8.1: ColumnDefinitions和RowDefinitions的道理是相同的,语法顺序是一样的,只不过是将ColumnDefinitions换成RowDefinitions而已 获取并 ...
- 一次性搞明白 service和factory区别
原文链接 http://blog.thoughtram.io/angular/2015/07/07/service-vs-factory-once-and-for-all.html 等下,已经有一篇文 ...
- SVN更新时,校验和不匹配
svn检出时出现校验和不匹配. 解决方法: 1. 在另外地方检出,然后找到对应文件所在的.svn/entries文件,用新检出的entries文件覆盖原来发生错误的entries文件. 2. 如果是团 ...
- NOI 1.5 42:画矩形
描述 根据参数,画出矩形. 输入 输入一行,包括四个参数:前两个参数为整数,依次代表矩形的高和宽(高不少于3行不多于10行,宽不少于5列不多于10列):第三个参数是一个字符,表示用来画图的矩形符号:第 ...