Selenium_WebDriver_多窗口切换
2024-08-21 16:59:19
摘要: 版权声明:本文为博主原创文章,转载请注明出处。
在页面操作过程中有时候点击某个链接会弹出新的窗口,这时我们如果需要操作新打开的页面,就需要将主机切换到新打开的窗口上再进行操作,比如博客园精华页的精华博文,每点击一篇就会打开一个浏览器窗口。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();
}
}
最新文章
- 一致性哈希算法以及其PHP实现
- php代码效率测试
- CRM 2016 js 奇怪现象
- 使用 Python 进行稳定可靠的文件操作
- 关于touch事件对于性能的影响
- POJ 2002 Squares
- Java API —— IO流小结
- MAT(2)安装Memory Analyzer
- Textview 文本旋转,倾斜
- LSPCI具体解释分析
- Spring AOP AspectJ Pointcut 表达式例子
- maven配置文件里改动默认jre
- frameset标签设计页面
- Docker下搭建Jenkins构建环境
- http中错误代码的含义整理
- [转]正则匹配时对象必须为string or bytes-like object
- 说说GIL
- Java程序员必会英语单词
- Django 之老师讲的教师,班级学生,class_2_teacher四个表格的项目
- webstorm 打包angular Module build failed: Error: No PostCSS Config found
热门文章
- Django App(四) Submit a form
- vhost:一种 virtio 高性能的后端驱动实现
- 从零开始学习前端开发 — 6、CSS布局模型
- Redis能干啥?细看11种Web应用场景
- Binlog的三个业务应用场景
- Android-第二天
- pjtool用到的数据库----oracle范畴
- <;%=pageCount %>;
- No grammar constraints (DTD or XML schema).....两种解决方法
- 20165206学习基础和C语言基础调查