使用webdriver关闭除第一个选项卡/主选项卡以外的所有打开的选项卡

任何人都可以告诉我如何使用webdriver关闭除第一个选项卡/主选项卡以外的所有打开的选项卡?

我在下面尝试过,但它也关闭了所有标签,包括第一个标签。

public static void closeTabs() { String wh1=driver.getWindowHandle(); String cwh=null; while(wh1!=cwh) { new Actions(driver).sendKeys(Keys.CONTROL).sendKeys(Keys.NUMPAD1).perform(); driver.findElement(By.tagName("body")).sendKeys(Keys.CONTROL, Keys.TAB); cwh=driver.getWindowHandle(); driver.findElement(By.tagName("body")).sendKeys(Keys.CONTROL+"w"); } } 

请帮帮我。

获取所有窗口句柄然后遍历它们,将webdriver切换到新句柄,然后调用close方法。 显然,跳过这个原始手柄,然后切换回剩余的手柄。

就像是;

  String originalHandle = driver.getWindowHandle(); //Do something to open new tabs for(String handle : driver.getWindowHandles()) { if (!handle.equals(originalHandle)) { driver.switchTo().window(handle); driver.close(); } } driver.switchTo().window(originalHandle); 

尝试这个代码它应该工作:

 for(String winHandle : driver.getWindowHandles()) { if (winHandle == driver.getWindowHandles().toArray()[driver.getWindowHandles().size()-1]) { continue; } driver.switchTo().window(winHandle); driver.close(); } 

尝试这个:

 for(int i = driver.getWindowHandles().size() -1 ; i > 0 ; i--){ String winHandle = driver.getWindowHandles().toArray()[i].toString(); driver.switchTo().window(winHandle); driver.close(); } 

我做了以下关闭所有窗口,但主要的:

 // Find out which handle is the one of the main window String mainWindow = driver.CurrentWindowHandle; // Get a list of all windows, except the main window driver.WindowHandles.Where(w => w != mainWindow).ToList() // For each window found .ForEach(w => { // switch to the window driver.SwitchTo().Window(w); // close the window driver.Close(); }); // At the end, come back to the main window driver.SwitchTo().Window(mainWindow); 

我有一个实用工具方法切换到所需的窗口,如下所示

 public class Utility { public static WebDriver getHandleToWindow(String title){ //parentWindowHandle = WebDriverInitialize.getDriver().getWindowHandle(); // save the current window handle. WebDriver popup = null; Set windowIterator = WebDriverInitialize.getDriver().getWindowHandles(); System.err.println("No of windows : " + windowIterator.size()); for (String s : windowIterator) { String windowHandle = s; popup = WebDriverInitialize.getDriver().switchTo().window(windowHandle); System.out.println("Window Title : " + popup.getTitle()); System.out.println("Window Url : " + popup.getCurrentUrl()); if (popup.getTitle().equals(title) ){ System.out.println("Selected Window Title : " + popup.getTitle()); return popup; } } System.out.println("Window Title :" + popup.getTitle()); System.out.println(); return popup; } } 

一旦窗口的标题作为参数传递,它将带您到所需的窗口。 在你的情况下你可以做到。

 Webdriver childDriver = Utility.getHandleToWindow("titleOfChildWindow"); childDriver.close(); 

然后再次使用相同的方法切换到父窗口

 Webdriver parentDriver = Utility.getHandleToWindow("titleOfParentWindow"); 

处理多个窗口时,此方法有效。