如何处理弹出窗口以访问pop元素

时间:2013-09-24 17:25:01

标签: selenium selenium-webdriver

我正在使用testcase来处理弹出窗口,但是控件不会弹出窗口。它显示主窗口的getTitle而不是弹出窗口。你可以通过下面的代码。

@Test
public void testText1() throws Exception {
    driver.get("http://www.hdfcbank.com");
    Thread.sleep(8000);
    driver.findElement(By.xpath(".//*[@id='loginsubmit']")).click();

    String popupHandle = driver.getWindowHandle();
    WebDriver popup;

    popup = driver.switchTo().window(popupHandle);
    System.out.println(popup.getTitle());
    if (popup.getTitle().equals("netbanking")) {
        System.out.println("I am going to access the elements of popup");
        driver.findElement(By.xpath(".//*[@id='wrapper']/div[6]/a/img")).click();
    } else {
        System.out.println("Worth Trying try harder to get success");
        //   
    }

}

输出:                 {d0f39d30-49e7-4203-b9ef-10380fbfcb5e}                HDFC银行:个人银行服务              我将访问弹出窗口的元素               线程“main”中的异常org.openqa.selenium.NoSuchElementException:无法定位元素:{“method”:“xpath”,“selector”:“.//* [@ id ='wrapper'] / div [6] / A / IMG“}               命令持续时间或超时:30.15秒

1 个答案:

答案 0 :(得分:2)

你走在正确的轨道上。 driver.getWindowHandle()方法仅返回当前窗口的句柄,该窗口将是您的主窗口。如果打开另一个弹出窗口,则需要调用Set<String> handles = driver.getWindowHandles()以返回所有可用句柄的列表。然后你可以拨打driver.switchTo().window(handles.get(handles.size() - 1))。这将切换到最后列出的(最新的)窗口句柄。

您也不需要声明新的WebDriver对象。通过调用switchTo(),您将驱动程序的焦点转移到新窗口。确保在进行切换之前保存对主窗口手柄的引用,以便之后可以切换回主窗口。

String mainHandle = driver.getWindowHandle();
String[] handles = driver.getWindowHandles().toArray(new String[0]);
driver.switchTo().window(handles[handles.length - 1]);
...
driver.close(); //close the popup window
driver.switchTo().window(mainHandle);