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 }

运行结果:

baidu search handle : {57536d1e-6817-4127-83d6-6eb138f28e51}
the link of news is : http://news.baidu.com/
switch to news page successfully
switch to search page successfully

时间: 2024-10-10 10:05:50

selenium测试(Java)--多窗口切换(十三)的相关文章

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

from selenium import webdriverfrom selenium.webdriver.common.by import Byimport time driver = webdriver.Firefox()driver.get("http://bj.ganji.com/")time.sleep(3) # 1.获取句柄 # 获取当前的handle名字handle = driver.current_window_handleprint("获取到当前的handl

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

#coding=utf-8 from selenium import webdriver import time from selenium.webdriver.support import expected_conditions as EC driver = webdriver.Chrome() driver.get('https://www.imooc.com/user/newlogin/from_url/') driver.find_element_by_name('email').sen

java+selenium——打开多个窗口,并切换窗口——方法一

先来解释下什么是句柄,有时候浏览器的窗口句柄,也叫windows id,英文单词更好理解. 你打开了一个浏览器,你开一个tab,就生成了一个id,这个id直到你关闭这个tab才会消失. 如果你在一个浏览器上打开多个tab,那么就有多个windows id,为什么你关闭其中一个tab,但是不影响其他tab的显示,就是这个id的作用. 本文就是要介绍如何获得浏览器窗体的句柄或者叫编号,为后面的driver实例在多个窗体之间切换做准备. 我们先看看浏览器只开一个tab,也就是只有一个windows句柄

java+selenium——打开多个窗口,并切换窗口——方法二

package rjcs; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.List; import java.util.Set; import org.openqa.selenium.interactions.Actions; import org.apache.commons.io.FileUtils; import org.openqa.selenium.TakesScreensh

java+selenium——打开多个窗口,并切换窗口——方法三

package rjcs; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.List; import java.util.Set; import org.openqa.selenium.interactions.Actions; import org.apache.commons.io.FileUtils; import org.o

selenium2.0+java窗口切换函数

最近使用selenium+java的时候需要使用窗口切换,网上找了下,比较简单,为以后学习记录下来 //窗口切换函数 public void windowsFocus() { String currentWindow = driver.getWindowHandle();//获取当前窗口句柄 Set<String> handles = driver.getWindowHandles();//获取所有窗口句柄 Iterator<String> it = handles.iterato

Selenium弹出新页面无法定位元素问题(Unable to locate element)--多窗口切换

最近学习到多窗口切换,在页面操作过程中有时点击某个链接会弹出新的窗口,这时需要先切换到新窗口才能对其进行操作.Webdriver提供了switch_to.window( ) 方法实现在不同窗口中切换. 查阅相关资料,得到两种方法来定位到当前页面: 方法一: browser.switch_to_window(browser.window_handles[1]) 方法二:直接定位当前最新弹出的窗口 for handle in browser.window_handles:#方法二,始终获得当前最后的

[selenium webdriver Java]处理弹出窗口

Selenium WebDriver测试弹出窗口,包括识别弹出窗口,将driver转到新的窗口,在新的串钩中执行而是步骤,然后再转换到最初的窗口. 通过名称(name)识别和处理: Selenium WebDriver允许我们通过name属性或窗口的句柄来识别窗口,然后通过WebDriver.switchTo().window()方法在不同的窗口之间进行切换. window name属性的定义 name 属性可设置或得到窗口的名称,其值为字符串.语法如下: 1 window.name = [na

selenium webdriver窗口切换

selenium webdriver窗口切换,有时候在做自动化的时候需要打开很多很多的页面, 当在操作不同的页面的时候需要切换窗口,下面是如何切换到前后页面窗口的操作: package test20161206; import org.openqa.selenium.By; import org.openqa.selenium.Keys; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; im