场景:使用webdriver开展自动化过程中,经常会遇到窗口间的切换。因为在通过执行脚本将
web页面打开的时候,并不能如我们手工操作时,理所当然的就可以在新打开的页面上进行操作,而是通过窗口跳转的脚本来完成的。
思路:通过获取窗口句柄,来实现窗口间的切换。
脚本:(JAVA语言实现)
方法一:适用于窗口有标题作为判断唯一依据的场景
public static boolean switchToNewWindow(WebDriver driver,final String windowTitel){
driver.manage().timeouts().implicitlyWait(50,TimeUnit.SECONDS)
return(new WebDriverWait(driver,200)).until(new ExceptedCondition<Boolean>){
public Boolean apply(WebDriver driver){
//获取所有窗口的句柄
Set<String>Handles = driver.getWindowHands();
// System.out.println(Handles.size());
//循环进入所有的窗口
for (String handle:Handles)
{
driver.switchTo().window(handle);
// System.out.println(driver.getCurrentUrl());
//窗口的Title值对比
if(driver.getTitle().equals(windowTitle))
{
return true;//跳出函数
}
}
return false;//跳出函数
}
}
);
}
方法二:窗口切换通用的方法,即使在窗口没有title标识的时候也一样适用。(传递的参数:数组)
public static boolean switchToNewWindow(WebDriver driver,final Set<String>handles){
return (new WebDriverWait(driver,200)).until(new ExpectedCondition<Boolean>(){
public Boolean apply(WebDriver driver){
Set<String> newHandles = driver.getWindowHandles();
newHandles.removeAll(handles);
// System.out.println(newHnadles.size());
if(newHandles.size()>0){
driver.switchTo().window(newHandles.iterator().next());
// System.out.println("driver switch to pop up window.");
// System.our.println(driver.getCurrentUrl());
return true;//跳出函数
}
System.out.println("Not find any other handle.Go to current window.");
return false;//跳出函数
}
}
);
}