2017-01-31 61 views
-2

所以我有這個代碼,使當前url父窗口和新的一個,我通過做任務子窗口打開。問題是這段代碼沒有任務1,然後關閉子窗口,但是當它進入for()循環時,它會打開另一個窗口,但不關注它拋出錯誤沒有這樣的窗口。Selenium處理循環中的瀏覽器窗口

String parent=driver.getWindowHandle(); 
Set<String>s1=driver.getWindowHandles(); 
Iterator<String> I1= s1.iterator(); 

while(I1.hasNext()){ 
    String child_window=I1.next(); 
    if(!parent.equals(child_window)) 
    { 
    driver.switchTo().window(child_window); 
    //do task number 1 
    driver.close(); 
for(int x = 1; x < 9000; x = x + 1) { 
    driver.switchTo().window(parent); 
    //opens another window 
    driver.switchTo().window(child_window); 
    //do task 2 
    driver.close(); 
    } 
    } 
} 
+0

@GrzegorzGórkiewicz以及它會關閉我的孩子窗口...追溯到父母打開另一個孩子我是這麼認爲想做 – GiTr3v

回答

0

在行driver.switchTo().window(child_window);您正在使用的第一個窗口,窗口已關閉,不再可用,因此NoSuchWindowExceptionWindowHandle

您每次打開窗口都需要獲取新窗口的窗口句柄。您可以切換窗口

private void switchToWindow(String parentHandle) { 
    Set<String> windowHandles = driver.getWindowHandles(); 
    for(String windowHandle : windowHandles) { 
     if (!parentHandle.equals(windowHandle)) { 
      driver.switchTo().window(windowHandle); 
      return; 
     } 
    } 
} 

創建方法和代碼將看起來像這樣

String parentHandle = driver.getWindowHandle(); 

switchToWindow(parentHandle); 
//do task number 1 
driver.close(); 

for(int x = 1 ; x < 9000 ; x += 1) { 
    driver.switchTo().window(parentHandle); 
    //opens another window 
    switchToWindow(parentHandle); 
    //do task 2 
    driver.close(); 
} 
相關問題