【问题标题】:automatic window close and switch back to parent window in selenium自动关闭窗口并切换回硒中的父窗口
【发布时间】:2016-01-19 17:43:22
【问题描述】:

基本我使用带有 POM 的 maven,在第二个窗口中执行操作并单击发送窗口自动关闭后,我无法将焦点切换回父窗口,之后我的 Firefox 驱动程序不起作用。

**我使用了下面提到的三个不起作用的选项**

    public void switchWindow() {
        String handle = driver.getWindowHandle();
        Set<String> set = driver.getWindowHandles();
        set.remove(handle);
        if (set.size() >= 1) {
          driver.switchTo().window((String) set.toArray()[0]);
        }


  public WebDriver switchWindowByTitle(String title)
  {
      WebDriver popup = null;
      Set<String> windowIterator = driver.getWindowHandles();
      System.err.println("No of windows :  " + windowIterator.size());
      for (String s : windowIterator) {
          String windowHandle = s;
          popup = driver.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;


 public WebDriver switchWindowByTitle(String title)
  {

 String currentWindow = driver.getWindowHandle();
    List<String> availableWindows = new ArrayList<String>(driver.getWindowHandles());

    for(String w : availableWindows)
    {
      if (w != currentWindow)
      {
        driver.switchTo().window(w);
        if (driver.getTitle().equalsIgnoreCase(title))
          return true;
        else
        {
          driver.switchTo().window(currentWindow);
        }
      }
    }
    return false;
  }

【问题讨论】:

标签: java selenium selenium-webdriver


【解决方案1】:

您需要在打开新窗口之前获取父窗口句柄,并在完成新窗口后切换回它。

// before opening the new window
String parentWindow = driver.getWindowHandle();

// after the new window was closed
driver.switchTo().window(parentWindow);

【讨论】:

  • 我已经尝试了上述建议,但它不起作用,基本上我使用的是我自己的网络驱动程序,请参考下面提到的 url 以进一步参考dropbox.com/s/2avinp6qhxguv96/…
  • @ChiragGupta 弹出窗口关闭后driver.getWindowHandles() 是只有一个窗口,还是识别更多窗口?
【解决方案2】:

我在 C# 中使用以下内容 它还支持打开多个选项卡。 Thread.Sleep 只是为了测试稳定性

    public static bool CloseCurrentTab(this IWebDriver driver)
    {
        var windowHandles = driver.WindowHandles;
        if (windowHandles.Count > 1)
        {
            driver.Close();
            driver.SwitchTo().Window(windowHandles[windowHandles.Count - 2]);
            Thread.Sleep(500);
            return true;
        }

        return false;

    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-17
    • 1970-01-01
    • 2016-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-23
    相关资源
    最近更新 更多