2013-09-24 74 views
0

我有用于处理弹出窗口的测试用例,但控件不会弹出窗口。它显示主窗口的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银行:个人银行服务 我要访问弹出 异常的线程中的元素 “主” org.openqa.selenium .NoSuchElementException:无法找到元素:{“method”:“xpath”,“selector”:“.//*[@ id ='wrapper']/div [6]/a/img”} 命令持续时间或超时:30.15秒

+0

嗨@Satendra你是什么意思弹出窗口?是Java脚本窗口或HTML弹出?如果它是HTML弹出,那么你不必遵循你创建的方法。这是直接的过程。如果您需要更多帮助,请告诉我。 – Vinay

回答

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); 
+0

handles.get(handles.size() - 1)它显示编译器错误。它是必需的数字值 – SATENDRA

+0

找不到符号 符号:方法get(int) 位置:类型java.util.Set 的变量句柄 ---- (Alt-Enter显示提示) – SATENDRA

+0

对不起,我修改了示例代码首先转换为数组,因此可以检索最后一个项目。 – eldon111