如果遇到点击按钮或链接后出现新窗口的情况,就需要使用窗口切换的方法。

切换窗口方法

本例中就是先打开百度搜索界面,然后利用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)--多窗口切换(十三)的更多相关文章

  1. selenium中的多窗口切换

    在selenium中,我们会遇到一些问题,就是多窗口处理的问题,我们爬取的内容在一个新窗口上,这个时候,我们就需要先切换到这个新的窗口上,然后进行抓取内容. 如何切换呢? 首先,获取当前窗口句柄 1. ...

  2. selenium - switch_to.window() - 多窗口切换

    在页面操作过程中有时候点击某个链接会弹出新的窗口,这时就需要主机切换到新打开的窗口上进行操作.WebDriver提供了switch_to.window()方法,可以实现在不同的窗口之间切换. 以百度首 ...

  3. python+selenium五:多窗口切换与获取句柄

    from selenium import webdriverfrom selenium.webdriver.common.by import Byimport time driver = webdri ...

  4. selenium之实现多窗口切换到自己想要的窗口

    #coding=utf-8 from selenium import webdriver import time from selenium.webdriver.support import expe ...

  5. 《手把手教你》系列技巧篇(二十三)-java+ selenium自动化测试-webdriver处理浏览器多窗口切换下卷(详细教程)

    1.简介 上一篇讲解和分享了如何获取浏览器窗口的句柄,那么今天这一篇就是讲解获取后我们要做什么,就是利用获取的句柄进行浏览器窗口的切换来分别定位不同页面中的元素进行操作. 2.为什么要切换窗口? Se ...

  6. Selenium常用API的使用java语言之14-多窗口切换

    在页面操作过程中有时候点击某个链接会弹出新的窗口, 这时就需要主机切换到新打开的窗口上进行操作.WebDriver提供了switchTo().window()方法可以实现在不同的窗口之间切换. 以百度 ...

  7. Selenium+Java(十一)Selenium窗口切换

    前言: Selenium在当前页面调整到新页面时打开了新的窗口,此时就需要跳转到新的窗口去,需要把窗口进行切换. 获取窗口句柄方法: 获取所有: //获取所有窗口句柄,返回的是set类型 driver ...

  8. [selenium webdriver Java]处理弹出窗口

    Selenium WebDriver测试弹出窗口,包括识别弹出窗口,将driver转到新的窗口,在新的串钩中执行而是步骤,然后再转换到最初的窗口. 通过名称(name)识别和处理: Selenium ...

  9. Python+Selenium学习--窗口切换及操作元素

    场景 有时候我们在测试一个web 应用时会出现多个浏览器窗口的情况,在selenium1.0 中这个问题比较难处理.webdriver 提供了相关相方法可以很轻松的在多个窗口之间切换并操作不同窗口上的 ...

随机推荐

  1. TotalCommander 之 日常使用技巧

    一. 常用操作 常用的操作如查看.复制.移动.删除退出已经在Total Commander下方列出,选择好文件后单击相应的按钮或是按下相应的快捷键(F3~F7)就可以完成操作.也可以像Windows中 ...

  2. DS实验题 融合软泥怪-2 Heap实现

    题目和STL实现:DS实验题 融合软泥怪-1 用堆实现优先队列 引言和堆的介绍摘自:Priority Queue(Heaps)--优先队列(堆) 引言: 优先队列是一个至少能够提供插入(Insert) ...

  3. mysql 查询成本

    SELECT SQL_NO_CACHE spu from dp_distributor_products_1_online where dpId > 15 AND dpId <= 60; ...

  4. 关于C#使用Dllimport 导入vc++动态库后网站部署提示 “无法加载 DLL,找不到指定模块”的解决方法。

    这次项目需要,做了一个C#写的WebService服务给外部调用,服务内部引用了算法库,本地调试已经通过,现场部署服务时各种提示找不到DLL文件. 第一.如果是包含有32位库在64位服务器系统上运行, ...

  5. iOS - + initialize 与 +load

    一.+ initialize 方法和+load 调用时机 首先说一下 + initialize 方法:苹果官方对这个方法有这样的一段描述:这个方法会在 第一次初始化这个类之前 被调用,我们用它来初始化 ...

  6. 使用ionic2开发一个登录功能

    服务的采用Asp.net API实现,数据库用的sqlite,具体实现请看:源代码 唯一需要说明的是跨域问题: 跨域代码: <system.webServer> <httpProto ...

  7. JQuery导航选择特效

    一.实现效果 1.初始化效果:未添加样式和特效 2.添加CSS样式 3.最终效果 二.JQuery代码 <!--编写JQuery代码--> <script type="te ...

  8. hdfs shell 命令以及原理

    shell 操作 dfs 上传[hadoop@namenode ~]$ /data/hadoop/bin/hadoop fs -put /opt/MegaRAID/MegaCli/MegaCli64 ...

  9. ios-将代码创建的视图控件放入拖拽控件的下面

    如图所示 图片是拖拽上去的imageView,橘黄色控件是在代码中创建的添加上去的,此时黄色view在imageView 上方 调用方法bringSubviewToFront:试图将imageView ...

  10. DataAnnotations里DisplayAttribute和 ValidationAttribute 如何从资源文件读取信息,显示多语言

    这个是我们常见的AccountModel代码 public class ChangePasswordModel { [Required] [DataType(DataType.Password)] [ ...