在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;
}