分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 网页技术

Selenium_WebDriver_多窗口切换

发布时间:2023-09-06 01:13责任编辑:胡小海关键词:Web

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


  在页面操作过程中有时候点击某个链接会弹出新的窗口,这时我们如果需要操作新打开的页面,就需要将主机切换到新打开的窗口上再进行操作,比如博客园精华页的精华博文,每点击一篇就会打开一个浏览器窗口。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(); ????}}

Selenium_WebDriver_多窗口切换

原文地址:http://www.cnblogs.com/xpp142857/p/7576922.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved