【问题标题】:How to handle multiple windows in selenium webdriver?如何在 selenium webdriver 中处理多个窗口?
【发布时间】:2021-08-19 21:00:15
【问题描述】:

getwindowhandle(); -> 用于获取父窗口名称。

getwindowhandles(): -> 用于获取所有子窗口的链接。

但是如何使用字符串和迭代器的概念呢?对于子窗口

【问题讨论】:

标签: selenium-webdriver


【解决方案1】:

您可以使用以下代码-

String mainwindow=driver.getWindowHandle(); //get parent(current) window name
    for(String popup :driver.getWindowHandles()) //iterating on child windows
    {
    driver.switchTo().window(popup);
    System.out.println("Popup values: "+popup);
    // Perform any operations on child window
    }
    driver.switchTo().window(mainwindow); //switch back to main window & continue further execution

【讨论】:

  • 好的...如果我想使用子窗口(新打开的窗口),但子窗口名称与父窗口名称相同,我该如何使用句柄?
  • 检查子窗口是否有 url。 if(driver.getCurrenturl().equals("你想要的窗口的url")){执行操作}。否则尝试 gettitle。
【解决方案2】:

试试这个。

 public void SwitchToAnotherWindow(Webdriver driver,int window_number){

     List<String> windowlist = null;

    Set<String> windows = driver.getWindowHandles();

    windowlist = new ArrayList<String>(windows);

   String currentWindow = driver.getWindowHandle();

 if (!currentWindow.equalsIgnoreCase(windowlist.get(window_number - 1))) 
    {
        driver.switchTo().window(windowlist.get(window_number - 1));
     }

}

只需传递窗口编号你要执行哪个窗口例如如果你想切换到3个窗口只需将3传递给这个方法,它可以直接洗牌到任何窗口 (例如:1 到 9 窗口,或 9 到 4 窗口)

【讨论】:

    【解决方案3】:
    public static void main(String[] args) throws InterruptedException
      {
    
       WebDriver d = new FirefoxDriver();
       d.get("url");
       String prntwin = d.getWindowHandle();
       System.out.println("Parent window's handle -> " + prntwin);
       WebElement clkElement = d.findElement(By.id("button1")); 
    
      for(int i = 0; i < 3; i++)
        {
        clkElement.click();
        Thread.sleep(3000);
        }
    
        Set<String> allWindowHandles = d.getWindowHandles();
    
       for(String handle : allWindowHandles)
          {
          System.out.println("Window handle - > " + handle);
       }
    
    }
    

    【讨论】:

      【解决方案4】:
      public static void main(String[] args) throws InterruptedException {
          ChromeOptions chromeOption = new ChromeOptions();
          ChromeDriverManager.chromedriver().setup();
          ChromeDriver driver = new ChromeDriver(chromeOption);
          driver.get("https://the-internet.herokuapp.com/");
          driver.manage().window().maximize();
          driver.findElement(By.xpath("//a[contains(text(),'Multiple Windows')]")).click();
          driver.findElement(By.xpath("//a[@target='_blank']")).click();
          Set<String>id=driver.getWindowHandles();
          Iterator<String> ids=id.iterator();
          String Parent=ids.next();
          String Child=ids.next();
          driver.switchTo().window(Child);
          System.out.println(driver.getTitle());
          driver.switchTo().window(Parent);
          System.out.println(driver.getTitle());
      }
      

      }

      【讨论】:

      • 感谢您对社区的贡献。这可能是一个正确的答案,但对您的代码提供额外的解释会很有用,以便开发人员能够理解您的推理。这对于可能不熟悉语法的新开发人员特别有用。此外,它可以帮助减少对后续问题的需求。您介意用更多详细信息更新您的评论吗?
      最近更新 更多