webdriver实现2个或两个以上窗口间切换的方法

2022-05-13 00:00:00 窗口 切换 两个

在UI自动化测试中,经常为需要打开多个窗口,以下两个方法分别实现了两个窗口和多个窗口间切换的功能,现分享代码如下:

package cn.migu.core;

import java.util.Iterator;
import java.util.Set;

import org.openqa.selenium.WebDriver;

import cn.migu.utils.Log4jUtil;
/**
 * <Description>切换窗口操作
 * @author YanLu
 *
 */
public class SwitchToWindow {
	private static Log4jUtil log = new Log4jUtil(TakeScreenshot.class.getName());

	/**
	 * 切换窗口(当前窗口为2个)
	 * @param driver
	 */
	public static void changeWindow(WebDriver driver) {
		String currentWindow = driver.getWindowHandle();// 获取当前窗口句柄
		Set<String> handles = driver.getWindowHandles();// 获取所有窗口句柄
		log.info("当前窗口数量:" + handles.size());
		Iterator<String> it = handles.iterator();
		while (it.hasNext()) {
			if (currentWindow == it.next()) {
				continue;// 跳出本次循环,继续下个循环
			}
			try {
				WebDriver window = driver.switchTo().window(it.next());// 切换到新窗口
				log.info("New page title is:" + window.getTitle());
			} catch (Exception e) {
				log.info("无法切换至新打开的窗口");
				log.info(e.getMessage());
			}
			// window.close();//关闭当前焦点所在的窗口
		}
		// driver.switchTo().window(currentWindow);//回到原来页面
	}

	/**
	 * 根据页面元素中的文本值实现在多个窗口间切换的方法
	 * @param driver
	 * @param targetText 目标元素的文本值
	 */
	public static void changeTargetWindow(WebDriver driver,String targetText) {
		// 得到所有窗口的句柄
		Set<String> handles = driver.getWindowHandles();
		log.info("当前窗口数量:" + handles.size());
		Iterator<String> it = handles.iterator();
		try {
			while (it.hasNext()) {
				// 遍历各个已打开的窗口
				WebDriver window = driver.switchTo().window(it.next());
				// 如果不存在页面元素,跳出,继续下次遍历
				if (!PageElement.isContentExist(driver, targetText)) { // 方法isContentExist(targetText))实现的功能是根据目前本文查看是否存在页面元素
					continue;
				}
				// 如果存在页面元素,终止遍历
				if (PageElement.isContentExist(driver, targetText)) {
					log.info("切换至目标窗口成功");
					log.info("New page title is:" + window.getTitle());
					break;
				}
			}
		} catch (Exception e) {
			log.info("无法切换至新打开的窗口");
			log.info(e.getMessage());
		}
	}
}

/**
	 * 根据文本内容查看元素是否存在
	 * 
	 * @param driver
	 * @param content
	 * @return
	 */
	public static boolean isContentExist(WebDriver driver, String content) {
		WebElement element = null;
		boolean status = false;
		try {
			element = driver.findElement(By.xpath("//*[contains(text(),'" + content + "')]"));
			status = (null != element);
			if (status) {
				log.info("\"" + content + "\"" + " is exist!");
			}
		} catch (Exception e) {
			log.info("\"" + content + "\"" + " doesn't exist!");
		}
		return status;
	}

    原文作者:russ44
    原文地址: https://blog.csdn.net/russ44/article/details/52127942
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。

相关文章