Selenium模拟浏览器切换窗口

Selenium模拟浏览器切换窗口

码农世界 2024-05-18 前端 76 次浏览 0个评论

天行健,君子以自强不息;地势坤,君子以厚德载物。


每个人都有惰性,但不断学习是好好生活的根本,共勉!


文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。

文章目录

  • 1. 窗口控制器获取
  • 2. 获取所有窗口控制器
  • 3. 切换窗口(切换控制器)
  • 4. 在原界面中打开新的窗口
  • 5. 在新界面中打开新的窗口
  • 6. 完整代码

    执行程序前请先配置驱动:

    关于Java selenium使用前浏览器驱动的下载和环境变量的配置

    关于Selenium自动化测试工具的Java实现详情请参考文章:

    如何查看页面对应的Selenium定位参数

    Java实现 selenium Web自动化测试(简单篇)

    Java实现 selenium Web自动化测试(详细篇)


    1. 窗口控制器获取

    每个窗口都有一个控制器控制,获取控制器就可以对此窗口进行操作

            //获取当前窗口的控制器
            String handle1 = webDriver.getWindowHandle();
            System.out.println("\n\n\n\n\n"+handle1+"\n\n\n\n\n");
    

    2. 获取所有窗口控制器

    处理上面的获取单个窗口控制器,还可以获取所有窗口的控制器

            //获取所有窗口的控制器
            Set handles = webDriver.getWindowHandles();
    

    3. 切换窗口(切换控制器)

    切换窗口就是切换控制器,通过switchTo方法进行切换

            //切换回原来的百度界面的窗口控制
            webDriver.switchTo().window(handle1);
    

    4. 在原界面中打开新的窗口

    打开新的窗口有两种方式,可以在现有的浏览器窗口中按Tab键在此浏览器界面打开新的窗口

            //按TAB键,在原有的浏览器界面中打开新的窗口
            webDriver.switchTo().newWindow(WindowType.TAB);
    

    5. 在新界面中打开新的窗口

    也可以在新的界面打开,使用switchTo().newWindow方法

            //创建新窗口(使用浏览器打开新的窗口界面)
            webDriver.switchTo().newWindow(WindowType.WINDOW);
    

    6. 完整代码

    WindowSwitchTest.java

    package com.libai.test.selenium.chrome;
    import org.openqa.selenium.By;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.WindowType;
    import org.openqa.selenium.chrome.ChromeDriver;
    import org.openqa.selenium.chrome.ChromeOptions;
    import java.util.Set;
    /**
     * @ClassDescription: 窗口切换
     * @JdkVersion: 1.8
     * @Author: 李白
     * @Created: 2024/5/8 18:52
     */
    public class WindowSwitchTest {
        public static void main(String[] args) throws InterruptedException {
            //指定驱动,第一个参数为驱动名称,不同浏览器的参数名称不一样,请根据浏览器查询到对应的浏览器参数名,第二个参数为驱动文件路径,即驱动完整文件路径
            System.setProperty("webdriver.chrome.driver", "D:\\JavaSoftWares\\Google\\driver\\chromedriver-win64\\chromedriver.exe");
            // 谷歌驱动
            ChromeOptions cops = new ChromeOptions();
            // 允许所有请求
            cops.addArguments("--remote-allow-origins=*");
            //默认设置开始打开网页时窗口最大化
            cops.addArguments("--start-maximized");
            //创建驱动对象
            WebDriver webDriver = new ChromeDriver(cops);
            // 启动需要打开的网页
            webDriver.get("https://www.baidu.com");
            //指定窗口大小--最大化
    //        webDriver.manage().window().maximize();
            //获取当前窗口的控制器
            String handle1 = webDriver.getWindowHandle();
            System.out.println("\n\n\n\n\n"+handle1+"\n\n\n\n\n");
            Thread.sleep(3000);
            //确认当前的窗口只有一个
            assert webDriver.getWindowHandles().size()==1;
            //跳转到新闻界面
            webDriver.findElement(By.linkText("新闻")).click();
            Thread.sleep(3000);
            System.out.println("\n\n\n\n\n"+webDriver.getCurrentUrl()+"\n\n\n\n\n");
            //获取所有窗口的控制器
            Set handles = webDriver.getWindowHandles();
            //遍历窗口控制器,如果和上面百度首页的不一样则将当前控制器切换
            for (String handle : handles) {
                if (!handle.equals(handle1)){
                    webDriver.switchTo().window(handle);
                }
            }
            System.out.println("\n\n\n\n\n"+webDriver.getCurrentUrl()+"\n\n\n\n\n");
            //定位到当前新闻页面的输入框,并输入文本进行查询
            webDriver.findElement(By.id("ww")).sendKeys("塞尔维亚");
            Thread.sleep(3000);
            //定位百度搜索按钮位置,并点击
            webDriver.findElement(By.id("s_btn_wr")).click();
            Thread.sleep(3000);
            //获取当前窗口的控制器
            String handle2 = webDriver.getWindowHandle();
            System.out.println("\n\n\n\n\n"+handle2+"\n\n\n\n\n");
            //切换回原来的百度界面的窗口控制
            webDriver.switchTo().window(handle1);
            Thread.sleep(3000);
            //定位百度首页的输入框,并输入文本进行查询
            webDriver.findElement(By.id("kw")).sendKeys("塞尔维亚");
            //点击搜索
            webDriver.findElement(By.id("su")).click();
            Thread.sleep(3000);
            //按TAB键,在原有的浏览器界面中打开新的窗口
            webDriver.switchTo().newWindow(WindowType.TAB);
            Thread.sleep(3000);
            //创建新窗口(使用浏览器打开新的窗口界面)
            webDriver.switchTo().newWindow(WindowType.WINDOW);
            Thread.sleep(3000);
            //关闭当前窗口,,新打开的其他网页不会关闭
            webDriver.close();
            Thread.sleep(3000);
            //关闭整个浏览器,所有网页窗口都会关闭
            webDriver.quit();
        }
    }
    

    感谢阅读,祝君暴富!

转载请注明来自码农世界,本文标题:《Selenium模拟浏览器切换窗口》

百度分享代码,如果开启HTTPS请参考李洋个人博客
每一天,每一秒,你所做的决定都会改变你的人生!

发表评论

快捷回复:

评论列表 (暂无评论,76人围观)参与讨论

还没有评论,来说两句吧...

Top