// 导入相关类库
import org.openqa.selenium.*;
import org.openqa.selenium.chrome.ChromeDriver;
public class SwitchWindowExample {
public static void main(String[] args) throws InterruptedException {
// 设置 ChromeDriver 路径
System.setProperty("webdriver.chrome.driver", "path/to/chromedriver");
// 创建 WebDriver 对象并打开网页
WebDriver driver = new ChromeDriver();
driver.get("https://www.example.com");
// 点击按钮或其他操作后,会跳转到新窗口
Thread.sleep(2000); // 等待两秒钟
// 获取当前窗口的句柄
String currentHandle = driver.getWindowHandle();
// 获取所有窗口的句柄列表
Set<String> handles = driver.getWindowHandles();
// 遍历窗口句柄列表,查找目标窗口
for (String handle : handles) {
if (!handle.equals(currentHandle)) {
// 切换到目标窗口
driver.switchTo().window(handle);
// 进行需要的操作...
break; // 只处理第一个符合条件的窗口
}
}
// 最后记得关闭WebDriver
driver.quit();
}
}
WebElement clickTest =driver.findElement(By.linkText("新闻"));
clickTest.click();//打开新闻链接
Thread.sleep(3000);
//获取当前窗口权柄
String currentHandle = driver.getWindowHandle();
//获取所有窗口权柄,并将权柄放在集合handles变量中
Set<String> handles = driver.getWindowHandles();
// 遍历窗口句柄列表,查找目标窗口
for (String handle : handles) {
if (!handle.equals(currentHandle)) {
// 切换到目标窗口
driver.switchTo().window(handle);
//校验打开的新闻链接
//获取当前页面的URL
String urlTest = driver.getCurrentUrl();//获取新开的新闻链接
Thread.sleep(3000);
System.out.println("当前页面链接是"+urlTest);
Assert.assertEquals(urlTest, "https://news.baidu.com/");
break;
}
}
通过如上方法也可以切换窗口driver,
上面是通过for if语句来实现的 ,还有一种方法,同时也可以在切换回初始页面的driver,该方法是通过获取set下标位置来定位driver
参考代码如下:
# 窗口句柄切换
String initialWindowHandle = driver.getWindowHandle(); //保存原始的浏览器窗口
DriverUtil.clickByCss(element, "div.title-area > div.ajust > span.title");//这个操作之后将会弹出另外一个浏览器窗口
DriverUtil.sleep(3);
Set<String> set = driver.getWindowHandles();//获取所有窗口权柄放在set集合中
set.remove(initialWindowHandle);//将初始窗口权柄从set集合中移除
assert set.size() == 1; //判断列表长度是否为1
driver.switchTo().window((String) set.toArray()[0]); //如果长度为1则执行将driver指向新弹出的浏览器窗口
String detailUrl = driver.getCurrentUrl();//获取新窗口url
driver.close(); //关闭新弹出的浏览器窗口
driver.switchTo().window(initialWindowHandle); //回到原始的浏览器窗口
实际代码如下:
String initialWindowHandle = driver.getWindowHandle(); //保存原始的浏览器窗口
WebElement clickTest =driver.findElement(By.linkText("新闻"));
clickTest.click();//打开新闻链接
Thread.sleep(3000);
//获取所有窗口句柄,并保存在list集合中
Set<String> set = driver.getWindowHandles();
//将最初权柄窗口从集合中移除,目前只剩新开窗口权柄
set.remove(initialWindowHandle);
//将driver指向新弹出的浏览器窗口
assert set.size() == 1;//判断集合set长度是否为1
driver.switchTo().window((String) set.toArray()[0]);//如果set长度为1则将driver指向下标为0的窗口
//校验打开的新闻链接
//获取当前页面的URL
String urlTest = driver.getCurrentUrl();//获取新开的新闻链接
Thread.sleep(3000);
System.out.println("当前页面链接是"+urlTest);
Assert.assertEquals(urlTest, "https://news.baidu.com/");
//回到原始的浏览器窗口
driver.switchTo().window(initialWindowHandle);
//获取原始窗口url链接
String urlTest2=driver.getCurrentUrl();
System.out.println("返回之后的页面链接是"+urlTest2);