【发布时间】:2018-01-10 14:03:48
【问题描述】:
我正在编写一个 selenium 脚本来登录并创建新邮件,发送并注销。但是当我点击新邮件按钮时,它会打开一个新窗口。在硒中,我该如何处理。我是硒的新手。请详细说明。
【问题讨论】:
我正在编写一个 selenium 脚本来登录并创建新邮件,发送并注销。但是当我点击新邮件按钮时,它会打开一个新窗口。在硒中,我该如何处理。我是硒的新手。请详细说明。
【问题讨论】:
使用下面的代码,你必须使用 getWindowHandles- 我希望它有帮助,如果你在其他地方卡住了,请告诉我 -
@Test
public void multipleWindows() {
driver.get(URL+"/windows");
driver.findElement(By.cssSelector(".example a")).click();
Object[] allWindows = driver.getWindowHandles().toArray();
driver.switchTo().window(allWindows[0].toString());
Assert.assertNotEquals(driver.getTitle(), "New Window");
driver.switchTo().window(allWindows[1].toString());
Assert.assertEquals(driver.getTitle(), "New Window");
}
}
【讨论】:
如何获取窗口句柄:
String handle = driver.getWindowHandle();
如果当您单击任何链接、按钮等时打开多个窗口...然后获取每个窗口的“窗口句柄”-
Set windowHandles = driver.getWindowHandles();
"getWindowHandles()" :方法返回窗口句柄(每个打开的窗口的唯一 id),以便设置返回类型。因为 set 不会包含重复的元素,所以这里 getWindowHandles 为每个 winodw 返回唯一的 id/窗口句柄并存储在 Set 中。
如何切换到正确/适当的窗口:
基本上有两种方法可以切换到合适的窗口。
获取当前/父/默认窗口句柄:
String handle = driver.getWindowHandle();
driver.switchTo().window( handle );
OR
Set < String > windowHandles = driver.getWindowHandles();
for(String handle : windowHandles )
{
driver.swicthTo().window( handle );
}
【讨论】:
试试这段代码,很容易理解。
WebDriver driver = new FirefoxDriver();
driver.get("http://demo.guru99.com/popup.php");
driver.findElement(By.xpath("html/body/p/a")).click();
// return the parent window name as a String
String parentWindow=driver.getWindowHandle();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
// Pass a window handle to the other window
for(String childWindow: driver.getWindowHandles())
{
System.out.println("Switch to child window");
//switch to child window
driver.switchTo().window(childWindow);
//find an element and print text of it
WebElement textLabel=driver.findElement(By.xpath("html/body/div[1]/h2"));
System.out.println(" text: "+textLabel.getText());
driver.close();
}
System.out.println("Get back to parent window");
//switch to Parent window
driver.switchTo().window(parentWindow);
//find an element and print text of it
WebElement logotext=driver.findElement(By.xpath("html/body/div[1]/h2"));
System.out.println("text: "+logotext.getText());
driver.close();
}
【讨论】: