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