zoukankan      html  css  js  c++  java
  • 章节十四、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基础开始。

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

  • 相关阅读:
    PIE SDK云图动画导出
    PIE SDK地图书签
    PIE SDK元素的保存与打开
    Jenkins简单入门:下载-安装-配置-构建
    Vue.js—60分钟快速入门
    程序员分享学习平台
    IOC+EF+Core项目搭建EF封装(一)
    python+django学习四
    python+django学习三
    Django2.0 应用 Xadmin 报错二
  • 原文地址:https://www.cnblogs.com/luohuasheng/p/11088189.html
Copyright © 2011-2022 走看看