章节十四、6-如何切换浏览器窗口

一、在自动化的过程中我们需要把操作从一个窗口转移到另一个窗口进行一些操作,那么我们该如何实现这个功能?

例如,我们需要在点击图中“打开新窗口”后在新的窗口中进行搜索。

每个窗口都带有一个固定句柄,每个打开的窗口都会有一个id,我们需要让selenium找到这个id然后在各个句柄(窗口)中进行切换

 1 package switchto;
 2
 3 import java.util.Set;
 4 import java.util.concurrent.TimeUnit;
 5
 6 import org.junit.jupiter.api.AfterEach;
 7 import org.junit.jupiter.api.BeforeEach;
 8 import org.junit.jupiter.api.Test;
 9 import org.openqa.selenium.By;
10 import org.openqa.selenium.WebDriver;
11 import org.openqa.selenium.WebElement;
12 import org.openqa.selenium.chrome.ChromeDriver;
13
14 class SwitchWindow {
15
16     WebDriver driver;
17     String url;
18
19     @BeforeEach
20     void setUp() throws Exception {
21         driver = new ChromeDriver();
22         url = "file:///C:/Users/acer/Desktop/%E5%85%B6%E5%AE%83/PracticePage.html";
23         driver.manage().window().maximize();
24         driver.manage().timeouts().implicitlyWait(2000, TimeUnit.SECONDS);
25         driver.get(url);
26     }
27
28     @Test
29     void test() throws InterruptedException {
30 //        获取主窗口的handle(句柄)
31         String mainHandle = driver.getWindowHandle();
32         System.out.println("主窗口handle为:"+mainHandle);
33 //        点击“打开新窗口”按钮
34         WebElement openWindow = driver.findElement(By.id("openwindow"));
35         openWindow.click();
36
37 //        获取所有窗口的handle
38         Set<String> allHandle = driver.getWindowHandles();
39
40 //        切换handle
41         for(String handle:allHandle)    {
42             System.out.println("获取到的handle为:"+handle);
43             if(!handle.equals(mainHandle)) {
44                 driver.switchTo().window(handle);
45                 Thread.sleep(3000);
46 //            在新窗口的百度页面输入框输入“selenium"
47                 WebElement seacherBox = driver.findElement(By.id("kw"));
48                 seacherBox.sendKeys("Selenium");
49 //                点击搜索按钮
50                 driver.findElement(By.id("su")).click();
51 //                关闭窗口
52                 driver.close();
53                 break;
54             }
55
56 //            切换回主窗口
57             driver.switchTo().window(mainHandle);
58             driver.findElement(By.id("name")).sendKeys("test");
59         }
60     }
61
62     @AfterEach
63     void tearDown() throws Exception {
64         Thread.sleep(2000);
65         driver.quit();
66     }
67 }

注意:

1、driver.close()与driver.quit()的区别:

driver.close()只关闭当前正在操作的浏览器窗口。

driver.quit()用于关闭浏览器所有窗口。

如果有不明白的小伙伴可以加群“555191854”问我,群里都是软件行业的小伙伴相互一起学习。

内容具有连惯性,未标注的地方可以看前面的博客,这是一整套关于ava+selenium自动化的内容,从java基础开始。

欢迎关注,转载请注明来源。

原文地址:https://www.cnblogs.com/luohuasheng/p/11088189.html

时间: 2024-10-18 11:12:37

章节十四、6-如何切换浏览器窗口的相关文章

十四.jQuery解析之浏览器嗅探

Chrome和Safrai使用的是webkit作为内核引擎,因此如果 jQuery.browser.webkit为true,则表示浏览器是chrome或safari; 如果jQuery.browser.mozilla为true,则表示浏览器是MozillaFirefox(火狐); jQuery.browser通过解析navigator.userAgent来获取浏览器类型和版本号,这种技术也称为浏览器的嗅探技术. navigator是全局对象window的属性,指向一个Navigator对象,包含

web自动化 -- 浏览器窗口切换

切换浏览器窗口 示例: from time import sleep from selenium import webdriver from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as EC url = "https://www.baidu.com" search_box = '//*[@id=&quo

Chrome浏览器扩展开发系列之十四:本地消息机制Native messagin

Chrome浏览器扩展开发系列之十四:本地消息机制Native messaging 2016-11-24 09:36 114人阅读 评论(0) 收藏 举报  分类: PPAPI(27)  通过将浏览器所在客户端的本地应用注册为Chrome浏览器扩展的"本地消息主机(native messaging host)",Chrome浏览器扩展还可以与客户端本地应用之间收发消息. 客户端的本地应用注册为Chrome浏览器扩展的"本地消息主机"之后,Chrome浏览器会在独立的

Chrome浏览器扩展开发系列之十四

Chrome浏览器扩展开发系列之十四:本地消息机制Native messaging 时间:2015-10-08 16:17:59      阅读:1361      评论:0      收藏:0      [点我收藏+] 通过将浏览器所在客户端的本地应用注册为Chrome浏览器扩展的"本地消息主机(native messaging host)",Chrome浏览器扩展还可以与客户端本地应用之间收发消息. 客户端的本地应用注册为Chrome浏览器扩展的"本地消息主机"

Android项目实战(四十四):Zxing二维码切换横屏扫描

原文:Android项目实战(四十四):Zxing二维码切换横屏扫描 Demo链接 默认是竖屏扫描,但是当我们在清单文件中配置横屏显示的时候: <activity android:name=".CaptureActivity" android:screenOrientation="landscape" android:theme="@android:style/Theme.NoTitleBar.Fullscreen" /> 这时候扫描

第二十四个知识点:描述一个二进制m组的滑动窗口指数算法

第二十四个知识点:描述一个二进制m组的滑动窗口指数算法 简单回顾一下我们知道的. 大量的密码学算法的大数是基于指数问题的安全性,例如RSA或者DH算法.因此,现代密码学需要大指数模幂算法的有效实现.我们应该从一个简化的方案开始思考:计算\(x^a\mod N\),我们可以用指数算法来求\(x^a\),然后再约减到\(N\).然而,对大多数密码算法来说,\(x^a\)都是非常大的.现在,大多数传统的方法能被简单的在每个阶段模\(N\).这回产生一些改进的技术.下面我会介绍一些计算\(X^E \mo

从零开始学ios开发(十四):Navigation Controllers and Table Views(上)

这一篇我们将学习一个新的控件Navigation Controller,很多时候Navigation Controller是和Table View紧密结合在一起的,因此在学习Navigation Controller的同时,我们还将继续学习Table View其他一些特性,毕竟Navigation Controller还是相对来说毕竟简单的,没有什么太大的花头,它的主要作用就是一个view的切换,切来切去,而Table View的花头就比较多了,这次我们将这2个控件结合在一起进行学习. 再多说一

关于Yahoo十四条军规与前端性能优化

关于Yahoo十四条军规与前端性能优化 热度 4已有 223 次阅读2014-8-3 15:01 |个人分类:前端相关|系统分类:前端优化| 前端优化, yahoo, 性能优化 启用Gzip压缩.Gzip的思想就是把文件先在服务器端进行压缩,然后再传输.这样可以显著减少文件传输的大小.传输完毕后浏览器会 重新对压缩过的内容进行解压缩,并执行.目前的浏览器都能“良好”地支持 gzip.不仅浏览器可以识别,而且各大“爬虫”也同样可以识别,各位seoer可以放下心了.而且gzip的压缩比例非常大,一般

CSS3秘笈复习:十三章&amp;十四章&amp;十五章&amp;十六章&amp;十七章

第十三章 1.在使用浮动时,源代码的顺序非常重要.浮动元素的HTML必须处在要包围它的元素的HTML之前. 2.清楚浮动: (1).在外围div的底部添加一个清除元素:clear属性可以防止元素包围浮动元素.关键字:left.right或both. (2).浮动外围元素:让包含浮动元素的<div>也浮动.选择这种方法一定要在浮动容器后面的任何元素中添加一个clear属性,确保浮动元素落到容器的下方. (3).利用overflow : hidden.另一种常见的方法是在外围的样式中添加以下属性: