章节十四、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