WEB自动化(JAVA版)——特殊元素定位与操作-window

本文介绍了在使用Selenium进行WEB自动化测试时,如何处理特殊元素定位,特别是窗口操作。讲解了如何通过窗口句柄切换不同窗口,并提供代码示例展示在新标签页而非新窗口中进行操作的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

特殊元素定位与操作-window

当要操作另外一个窗口页面的元素时,一定要注意先切换窗口。
切换方式:传入要操作窗口的name或者句柄handle
driver.switchTo.window(nameOrHandle);

如何获取到窗口的句柄

  • driver.getWindowHandle();//获取当前操作窗口的句柄
  • driver.getWindowHandles();//获取测试时打开的所有窗口句柄

代码示例

虽然页面已经到了B窗口,但是句柄还是在a窗口中,所以你操作的还是a窗口

package com.test;

import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

public class SpecialElementLocate {

	private static ChromeDriver chromeDriver;
	
	public static void main(String[] args) throws InterruptedException {	
		//window处理
		//访问本地HTML文件
		chromeDriver.get("D:\\window\\a.html");
		//点击按钮
		chromeDriver.findElement(By.id("aa")).sendKeys("这是第一个窗口");
		System.out.println("跳转前的窗口句柄:"+chromeDriver.getWindowHandle());
		Thread.sleep(2000);
		//切换到B窗口
		chromeDriver.findElement(By.id("bb")).click();
		//虽然页面已经到了B窗口,但是句柄还是在a窗口中,所以你操作的还是a窗口
		Thread.sleep(2000);
		System.out.println("跳转后的窗口句柄:"+chromeDriver.getWindowHandle());	
	}
	
	public static void openChrome() {
		System.setProperty("webdriver.chrome.driver", "src/test/resources/chromedriver.exe");
		//1.打开Chrome浏览器
		chromeDriver = new ChromeDriver();
	}
}

切换句柄

package com.test;

import java.util.Set;

import org.openqa.selenium.Alert;
import org.openqa.selenium.By;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

public class SpecialElementLocate {

	private static ChromeDriver chromeDriver;
	
	public static void main(String[] args) throws InterruptedException {			
		//window处理
		//访问本地HTML文件
		chromeDriver.get("D:\\window\\a.html");
		//点击按钮
		chromeDriver.findElement(By.id("aa")).sendKeys("这是第一个窗口");
		System.out.println("跳转前的窗口句柄:"+chromeDriver.getWindowHandle());
		Thread.sleep(2000);
		//切换到B窗口
		chromeDriver.findElement(By.id("bb")).click();
		//虽然页面已经到了B窗口,但是句柄还是在a窗口中,所以你操作的还是a窗口
		Thread.sleep(2000);
		System.out.println("跳转后的窗口句柄:"+chromeDriver.getWindowHandle());	
		
		//句柄的切换
		//进入到b窗口之后,获取到所有窗口的句柄
		Set<String> handles = chromeDriver.getWindowHandles();
		//对窗口集合进行遍历
		for(String handle : handles) {
			//切换句柄
			chromeDriver.switchTo().window(handle);
			//??我怎么知道b窗口的句柄呢?
			if(chromeDriver.getTitle().equals("b.html")) {
				//如若标题是符合的话,就跳出循环
				break;
			}
		}
		chromeDriver.findElement(By.id("bb")).sendKeys("这是第二个窗口");
	}
	
	public static void openChrome() {
		System.setProperty("webdriver.chrome.driver", "src/test/resources/chromedriver.exe");
		//1.打开Chrome浏览器
		chromeDriver = new ChromeDriver();
	}
}

补充知识-如何打开新标签页,而不是新窗口

        JavascriptExecutor js = (JavascriptExecutor) chromeDriver;
        js.executeScript("window.open();");
        ArrayList<String> tabs = new ArrayList<String> (chromeDriver.getWindowHandles());
        chromeDriver.switchTo().window(tabs.get(1)); //switches to new tab  
        chromeDriver.get("www.baidu.com");
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值