2013-09-24 73 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