Selenium_WebDriver_多窗口切换

摘要: 版权声明:本文为博主原创文章,转载请注明出处。



  在页面操作过程中有时候点击某个链接会弹出新的窗口,这时我们如果需要操作新打开的页面,就需要将主机切换到新打开的窗口上再进行操作,比如博客园精华页的精华博文,每点击一篇就会打开一个浏览器窗口。WebDriver 提供了 switchTo().window()方法可以实现在不同的窗口之间切换。


方法


说明


switchTo().window()


原型


WebDriver window(java.lang.String nameOrHandle)


参数


nameOrHandle:WebDriver 返回的窗口或句柄的名称;

通过 getWindowHandle ()获取;


作用


切换到具有给定名称/句柄的窗口。


用法


driver.switchTo().window( nameOrHandle );


异常


NoSuchWindowException-如果找不到窗口


getWindowHandle


原型

java.lang.String getWindowHandle();

作用


返回此窗口中唯一标识此驱动程序实例中的不透明句柄。


getWindowHandles


原型


java.util.Set<java.lang.String> getWindowHandles()


返回值


Set集合,可以参考Set容器的相关方法,对其进行操作;

  在如下的测试代码中,我们登录博客园,打开博客园的精华页面,依次进入前两篇精华博文,再分别定位到这两篇博文的“评论区”,输入“Test————SwitchTo()方法”测试多窗口的切换,但为维持环境和谐,不进行评论提交操作;

package com.SeleniumLib.jase;

import java.util.List;
import java.util.Set;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;

public class SwitchTo {
    public static void main(String[]args) throws InterruptedException{

        WebDriver   driver;
        System.setProperty("webdriver.chrome.driver","D:/selenium-java-3.5.3/chromedriver.exe");   //chromedriver驱动的本地存放路径
        driver = new ChromeDriver();

/*多窗口切换————测试整体流程:打开cnblogs精华页,依次进入前两篇精华博文,再分别定位到这两篇博文的“评论区”(为维持环境和谐,暂不进行评论提交操作)*/
        driver.get("https://passport.cnblogs.com/user/signin?ReturnUrl=https%3A%2F%2Fwww.cnblogs.com%2F");
        driver.findElement(By.id("input1")).sendKeys("天使未必在场"); //博客园登陆名
        driver.findElement(By.id("input2")).sendKeys("***");  //博客园登录密码
        driver.findElement(By.id("signin")).click();
        Thread.sleep(2000);   //需要等待几s;
        driver.get("https://www.cnblogs.com/pick/");   //跳转到"精华"页面;
        String JHWindowHandle = driver.getWindowHandle();  //获取“精华”页面的窗口句柄
        System.out.println("JHWindowHandle :"+JHWindowHandle); 

        //依次打开前两篇精华博文;
        List<WebElement> elements = driver.findElements(By.className("titlelnk"));  //获取所有的精华博文;
        for(int i=0; i < 2;++i)  //控制打开博文的个数
        {
            elements.get(i).click();   //打开第【i+1】篇博文;
            Thread.sleep(2000);
        }

        //对上述打开的两篇博文输入“评论”但不提交评论;
        Set<String> Set = driver.getWindowHandles();  //获取所有已经打开的窗口句柄;会获取到三个=精华主页+2篇博文;
        int size = Set.size(); //获取打开窗口的个数
        int i = 0;
        System.out.println("该测试代码打开的窗口个数: "+size);
        for (String WindowHandles : Set)
        {
            System.out.println("WindowHandle["+i+"] = "+WindowHandles);
            driver.switchTo().window(WindowHandles);
            if(!WindowHandles.equals(JHWindowHandle))   //非精华主页,则是两篇博文中的其中一篇,可以在评论区进行“评论”;
            {
                System.out.println("CurrentUrl:"+driver.getCurrentUrl());
                driver.findElement(By.id("tbCommentBody")).sendKeys("Test————SwitchTo()方法");  //仅输入不提交;
                //Thread.sleep(2000);
            }
            ++i;
        }  

        System.out.println("end selenium");
        //driver.close();
    }
}
时间: 2024-10-11 10:42:37

Selenium_WebDriver_多窗口切换的相关文章

uCGUI 按键窗口切换机制(更新篇)

在之前文章中,讲述了一个低内存使用量的的窗口切换机制.有人会问,低内存使用量是多低呢,我这里举个例子.我有一个项目中使用到本切换机制,128*64的单色屏,初步计算有105个窗口(后面还会增加),总内存使用量(包括任务栈)=105*3*4(窗口树) + 1024(公共buff) + 512(任务栈) + 1024*3(uCGUI动态内存) = 6k左右.从这个数字可以看出内存算是使用比较少的了.毕竟有100多个窗口,我在设计时也就只做了10多个窗口,这100多个窗口就是由10多个窗口大量复用组合

第三章:Selenium 多窗口切换

当遇到在某一个窗口中点击某个按钮,就会跳转到另外一个窗口中,此时,如果不进行窗口切换,就会造成 元素错误. 多窗口切换案例: 我们想要操作 京东企业购 里面的内容:就必须进行窗口切换,这样才会保证不会报错 2. 窗口切换的代码:

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

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.Javascript

selenium 窗口切换(多表单切换)

在web应用中,前台网页的设计一般会用到iframe/frame表单嵌套页面的应用.简单的就是一个页面签嵌套多个HEML/JSP文件.selenium webdriver  只能在同一页面识别定位元素,可以狭隘的理解成只能识别当前所在位置的页面上的元素.对于不同的iframe/frame表单中的元素是无法直接定位的.需要结合switchTo().frame()方法切换到指定的frame/iframe中.switchTo().frame()默认的是取表单的ID和name属性.如果没有id和name

selenium2.0+java窗口切换函数

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

webdriver实现简单的窗口切换

webdriver实现简单的窗口切换,也只能是简单的,因为目前处于学习阶段,复杂的情况现在还没碰到过.之前写过关于一个小demo的总结,就有提到过在新开窗口进行操作的情况,用以下一句就可以搞定了,last代表最后一个窗口,用switch_to切换到最后一个窗口(即新开的窗口)进行操作 dr.switch_to.window dr.window_handles.last 这样一般的流程整个下来是不会有问题的,可是很死板.如果我在操作过程中开了n个窗口,并且要返回到某个窗口去进行操作那该怎么办?显然

Eclipse 在编辑窗口切换页面快捷键

今天做开发的时候想要参考一下同一个项目中的代码,在Eclipse的编辑窗口中打开了多个java文件,但是每次切换都用鼠标点一下觉得太麻烦了,记得有快捷键,但是以前用的不多,在网上找了下 1.编辑页面编辑页之间切换的快捷键 Ctrl + Shift + F6 (轻松实现了切换) 2.java窗口和deBug调试窗口切换快捷键 Ctrl + Shift + F8 3.查看快捷键列表的快捷键 Ctrl + Shift + L http://blog.sina.com.cn/s/blog_6af068f

web自动化6-selenium多窗口切换及JS对话框处理

1.    多窗口切换 browser.window_handles                 显示所有句柄 browser.current_window_handle 显示当前句柄 browser.switch_to_window(browser.window_handles[1])  切换句柄 2.    js对话框处理 alter = browser.find_element_by_xpath('//*[@id="topguideloginform"]/div[4]/but