当前位置: 首页 > 知识库问答 >
问题:

无法切换到父窗口,表示窗口已关闭

司徒高丽
2023-03-14

我正在IE上测试。单击后,我切换到子窗口,但无法返回父窗口,出现错误“窗口已关闭”。

String parent= driver.getWindowHandle(); //after clicking new window pop up
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("(//a[@href='javascript:submitExport()'])[5]"))).click();
System.out.println("parent"+parent);

for (String child : driver.getWindowHandles()) {
   System.out.println("child"+child);
   if(!parent.equalsIgnoreCase(child))
   {
    driver.switchTo().window(child);
    wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//a[contains(.,'Export')]")));

    WebElement ele=driver.findElement(By.xpath("//a[contains(.,'Export')]"));

    ele.click();
   }

}
System.out.println("current handles"+driver.getWindowHandle());
driver.close();
System.out.println("current handles"+driver.getWindowHandle());
driver.switchTo().window(parent);

共有2个答案

袁玮
2023-03-14

你可以参考这个逻辑,

//It will open new tab using Javascript
((JavascriptExecutor) driver).executeScript("window.open()");

//Manage to switch driver on newly opened tab
ArrayList<String> tabs = new ArrayList<String>(driver.getWindowHandles());
driver.switchTo().window(tabs.get(tabs.size() - 1));

//Manage to switch driver on existing old tab
driver.close();
driver.switchTo().window(tabs.get(tabs.size() - 2));
傅和璧
2023-03-14

仔细查看您的代码,

System.out.println("current handles"+driver.getWindowHandle());
driver.close();
System.out.println("current handles"+driver.getWindowHandle());
driver.switchTo().window(parent);

似乎您正在调用switchTo()。关闭驱动程序后的窗口(父级)
驱动程序。close()此方法关闭设置焦点的浏览器窗口<这可能是您试图关闭子浏览器的问题,但它会导致错误地关闭父浏览器,或者由于某些操作,它们可能会自动关闭。仅当打开多个浏览器窗口时使用
在调用switchTo()之前不要关闭驱动程序。

我希望这对你有用,

System.out.println("current handles"+driver.getWindowHandle()); 
driver.switchTo().window(parent);   
System.out.println("current handles"+driver.getWindowHandle());    
driver.close();

基本方式,

您可以使用一个用于存储的集合keep record和迭代器对其进行迭代,

wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("(//a[@href='javascript:submitExport()'])[5]"))).click()
Set <String> handles =driver.getWindowHandles(); // take all window info
Iterator<String> it = handles.iterator();
String parent = it.next(); // store
String child = it.next(); // store
driver.switchTo().window(child); // switching
driver.close(); // close child window
driver.switchTo().window(parent); // switching
driver.quit(); // close 
 类似资料: