【问题标题】:Closing all opened tabs except the first tab/main tab using webdriver使用 webdriver 关闭除第一个选项卡/主选项卡之外的所有打开的选项卡
【发布时间】:2013-08-31 20:40:25
【问题描述】:

谁能告诉我如何使用 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");
    }
}

请帮帮我。

【问题讨论】:

  • 谁能帮帮我,如何关闭标签..?

标签: java selenium tabs webdriver selenium-webdriver


【解决方案1】:

获取所有窗口句柄,然后遍历它们,将 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);

【讨论】:

  • 我想知道为什么 driver.switchTo().window(handle).close() 不起作用,但 driver.switchTo().window(handle); driver.close(); 起作用
  • driver.switchTo().window(handle) 切换当前窗口上下文但确实返回一个 wendriver 对象
【解决方案2】:

试试这段代码,它应该可以工作:

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

【讨论】:

  • 嗨 Abhi,它关闭了整个窗口,而不是选项卡。但我想在单个/同一窗口中关闭除第一个选项卡之外的所有选项卡。请告诉我该怎么做?如果您需要有关此的任何其他信息,请告诉我..
【解决方案3】:

试试这个:

for(int i = driver.getWindowHandles().size() -1 ; i > 0 ; i--){

        String winHandle = driver.getWindowHandles().toArray()[i].toString();

        driver.switchTo().window(winHandle);

        driver.close();

}

【讨论】:

    【解决方案4】:

    我执行了以下操作来关闭除主窗口以外的所有窗口:

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

    【讨论】:

      【解决方案5】:

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

      public class Utility 
      {
          public static WebDriver getHandleToWindow(String title){
      
              //parentWindowHandle = WebDriverInitialize.getDriver().getWindowHandle(); // save the current window handle.
              WebDriver popup = null;
              Set<String> 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");
      

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

      【讨论】:

        【解决方案6】:

        如果有人正在寻找 VBA SeleniumBasic ChromeDriver 解决方案,请看这里。

        Dim TabA as String
        TabA = MyChromeDriver.Windows.Item(1).Title
        Do While MyChromeDriver.Windows.Count > 1
             MyChromeDriver.Windows.Item(MyChromeDriver.Windows.Count).Close
        Loop
        On Error Resume Next
             MyChromeDriver.SwitchToWindowByTitle TabA
        On Error GoTo 0
        

        【讨论】:

          【解决方案7】:

          这会给你清晰的画面, 将按以下顺序排列:

          • 创建一个新标签
          • 切换到它
          • 在新标签页做点什么
          • 关闭新标签
          • 切换回我们原来的标签
          // save a reference to our original tab's window handle
          var originalTabInstance = myWebDriverInstance.CurrentWindowHandle;
          
          // execute some JavaScript to open a new window
          myWebDriverInstance.ExecuteJavaScript("window.open();");
          
          // save a reference to our new tab's window handle, this would be the last entry in the WindowHandles collection
          var newTabInstance = myWebDriverInstance.WindowHandles[Driver.Instance.WindowHandles.Count - 1];
          
          // switch our WebDriver to the new tab's window handle
          myWebDriverInstance.SwitchTo().Window(newTabInstance);
          
          // lets navigate to a web site in our new tab
          myWebDriverInstance.Navigate().GoToUrl("www.crowbarsolutions.com");
          
          // now lets close our new tab
          myWebDriverInstance.ExecuteJavaScript("window.close();");
          
          // and switch our WebDriver back to the original tab's window handle
          myWebDriverInstance.SwitchTo().Window(originalTabInstance);
          
          // and have our WebDriver focus on the main document in the page to send commands to myWebDriverInstance.SwitchTo().DefaultContent();
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-10-30
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-01-11
            相关资源
            最近更新 更多