Selenium Java:无法获得弹出窗口

时间:2017-04-10 06:32:50

标签: java selenium-webdriver

我不确定getWindowHandles是否是获取弹出窗口句柄的正确方法,因为以下内容只返回父句柄而不是子句柄。

for (String handle : driver.getWindowHandles()) {
            driver.switchTo().window(handle);
}
WebDriverWait waitforEle = new WebDriverWait(driver, 300);
waitforEle.until(ExpectedConditions.visibilityOfAllElementsLocatedBy
(By.xpath("//*[@id='blah']")));

如果上述方法不正确,有人能告诉我如何处理弹出窗口吗?

谢谢, 复选框。

2 个答案:

答案 0 :(得分:0)

getWindowHandles()方法为您提供已打开的浏览器窗口或标签的ID。您只需要使用弹出窗口的定位器等待一个WebElement。

WebDriverWait wait = new WebDriverWait(driver, 300);
wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//*[@id='blah']"));

答案 1 :(得分:0)

如果弹出窗口是警报,请使用:

Alert alert =driver.switchTo().alert(); alert.accept();

或者如果是应用程序弹出窗口,则使用:

String parentWinHandle = driver.getWindowHandle();
//Click the button or link which populates the window
driver.findElement(By.id(actionBtn)).click();
Thread.sleep(5000);
Set<?> popupHandles = driver.getWindowHandles();
//SOP *popupHandles* 
Iterator<?> iterator = popupHandles.iterator();
while(iterator.hasNext())
    {
    String popupHandle = iterator.next().toString();
    if(!popupHandle.contains(parentWinHandle)) {
        driver.switchTo().window(popupHandle);
        Thread.sleep(3000);
        //Perform the operation you want to do
        driver.switchTo().window(parentWinHandle);
    }
}