Selenium webdriver 如何在selenium webdriver中处理多个窗口?

Selenium webdriver 如何在selenium webdriver中处理多个窗口?,selenium-webdriver,Selenium Webdriver,getwindowhandle()->,用于获取父窗口名称 getwindowhandles():->,用于获取所有子窗口链接 但是如何使用字符串和迭代器概念呢?对于子窗口,您可以使用以下代码- String mainwindow=driver.getWindowHandle(); //get parent(current) window name for(String popup :driver.getWindowHandles()) //iterating on child wind

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

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


但是如何使用字符串和迭代器概念呢?对于子窗口,您可以使用以下代码-

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
试试这个

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

}
public void切换到另一个窗口(Webdriver驱动程序,int window\u编号){
列表窗口列表=空;
设置windows=driver.getWindowHandles();
windowlist=新阵列列表(windows);
字符串currentWindow=driver.getWindowHandle();
如果(!currentWindow.equalsIgnoreCase(windowlist.get(窗口编号-1)))
{
driver.switchTo().window(windowlist.get(window_number-1));
}
}
只需传递窗口编号要执行的窗口例如,如果要切换到3个窗口,只需将3传递给此方法,它就可以直接随机移动到任何窗口 (例如:1到9窗口或9到4窗口)

publicstaticvoidmain(String[]args)抛出InterruptedException
{
WebDriver d=新的FirefoxDriver();
d、 获取(“url”);
字符串prntwin=d.getWindowHandle();
System.out.println(“父窗口的句柄->”+prntwin);
WebElement clkElement=d.findElement(By.id(“button1”);
对于(int i=0;i<3;i++)
{
clkElement.click();
睡眠(3000);
}
设置allWindowHandles=d.getWindowHandles();
for(字符串句柄:allWindowHandles)
{
System.out.println(“窗口句柄->”+句柄);
}
}
公共静态void main(字符串[]args)引发InterruptedException{
ChromeOptions ChromeOptions=新的ChromeOptions();
ChromeDriverManager.chromedriver().setup();
ChromeDriver驱动器=新的ChromeDriver(chromeOption);
驱动程序。获取(“https://the-internet.herokuapp.com/");
driver.manage().window().maximize();
findElement(By.xpath(“//a[contains(text(),'Multiple Windows')]”)。单击();
driver.findElement(By.xpath(“//a[@target='''u blank'])。单击();
Setid=driver.getWindowHandles();
迭代器id=id.Iterator();
字符串Parent=ids.next();
String Child=ids.next();
driver.switchTo().窗口(子窗口);
System.out.println(driver.getTitle());
driver.switchTo()窗口(父窗口);
System.out.println(driver.getTitle());
}

}

请参阅此博客,了解Ok的可能副本。。。如果我想使用子窗口(新打开的窗口),但子窗口名称与父窗口名称相同,我如何使用句柄?检查子窗口是否有url。if(driver.getCurrenturl().equals(“所需窗口的url”){perform operation}。否则请尝试gettitle。感谢您对社区的贡献。这可能是一个正确的答案,但为代码提供额外的解释会很有用,这样开发人员就可以理解您的推理。这对于可能不熟悉语法的新开发人员特别有用。此外,这有助于减少后续问题的需要。你介意用更多的细节更新你的评论吗?
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);
   }

}
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());
}