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

时间:2018-10-13 09:09:58

标签: java selenium selenium-webdriver

我正在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 个答案:

答案 0 :(得分:0)

请仔细看一下代码,

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

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

我希望这可能对您有用,

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

基本方式,

您可以使用一组存储保持记录和迭代器来对其进行迭代,

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 

答案 1 :(得分:-1)

您可以参考此逻辑,

//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));