句柄:窗口编号
当新打开一个窗口,就会产生一个句柄。切换只要获取所有的句柄,然后选择相应的句柄即可
方法一:利用for循环来实现窗口之间的切换
private WebDriver driver;
@Test
public void testUntitledTestCase() throws Exception {
driver.get("https://www.jd.com/");
String oldHandle=driver.getWindowHandle();
String oldtitle=driver.getTitle();
System.out.println(oldHandle+"---------");
driver.findElement(By.linkText("家用电器")).click();
driver.findElement(By.partialLinkText("京东金融")).click();;
//除第一个窗口,均关闭
//switchToWindowAndClose(oldHandle,oldtitle);
}
//到最初的窗口,并把其他窗口关闭因为最开始的窗口索引为0
private void switchToWindowAndClose(String oldHandle,String oldtitle) {
// TODO Auto-generated method stub
//driver.switchTo().window(driver.getWindowHandles().iterator().next());
for(String winHandle:driver.getWindowHandles())
{
if(winHandle.equals(oldHandle))
{
driver.switchTo().window(winHandle);//如果不是,则切换到当前窗口
System.out.println(driver.getTitle().equals(oldtitle));//检查title是否一致
continue;
}
driver.switchTo().window(winHandle);
driver.close();
}
}
方法二:
1、获取所有窗口的句柄并放入到set集合中
2、把set集合放入到list对象中
在list中索引对应的窗口顺序:第一个打开的窗口索引是0;其他窗口对应的索引顺序是:最后一个打开的窗口索引是1,剩下的窗口索引依次是打开窗口顺序的倒序
下面例子是切换到家用电器窗口
@Test
public void testUntitledTestCase() throws Exception {
driver.get("https://www.jd.com/");//向浏览器发送网址 0
driver.findElement(By.linkText("家用电器")).click();//2
driver.findElement(By.partialLinkText("京东金融")).click();;// 1
//除第一个窗口,均关闭
switchToWindowAndClose();
}
//在list中索引对应的窗口顺序:第一个打开的窗口索引是0;其他窗口对应的索引顺序是:最后一个打开的窗口索引是1,剩下的窗口索引依次是打开窗口顺序的倒序
private void switchToWindowAndClose() {
// TODO Auto-generated method stub
//driver.switchTo().window(driver.getWindowHandles().iterator().next());
Set<String> allwinds=driver.getWindowHandles();
List<String> it=new ArrayList<String>(allwinds); //ArrayList(Collection<? extends E> c)
for(int i=0;i<it.size();i++)
{
if(i==2)
{
driver.switchTo().window(it.get( i));
continue;
}
driver.switchTo().window(it.get( i));
driver.close();
}
}
衍生的方法,可以根据title切换窗口(一般来说,一个页面的title不会变,通过观察页面就可找到,所以是已知项)
//根据title切换窗口
@Test
public void testUntitledTestCase() throws Exception {
driver.get("https://www.jd.com/");
driver.findElement(By.linkText("家用电器")).click();
driver.findElement(By.partialLinkText("京东金融")).click();
//切换到京东金融窗口
switchToWindowAndClose();
}
private void switchToWindowAndClose() {
// TODO Auto-generated method stub
for(String winHandle:driver.getWindowHandles())
{
if(winHandle.equals("京东金融-服务金融机构的数字科技公司"))
{
driver.switchTo().window(winHandle);//如果不是,则切换到当前窗口
System.out.println(driver.getTitle().equals("京东金融-服务金融机构的数字科技公司"));//检查title是否一致
continue;
}
driver.switchTo().window(winHandle);
driver.close();
}
}
在本例中所涉及的新方法如下: