2013-12-09 62 views
0

我有一個父窗口,它只有登錄字段,我已經存儲在使用它的控制:切換控制彈出式菜單

String parentWindow= idriver.getWindowHandle();

時輸入的登錄憑據,一個新的彈出窗口(比如說「彈出A「)打開和我的應用程序運行在它。我已經切換控制這個‘彈出A’使用:

for (String handle1 : idriver.getWindowHandles()) { idriver.switchTo().window(handle1); }

現在,當我在這個彈出一個點擊按鈕,彈出打開(說「Popup B」),我再次使用:

for (String handle1 : idriver.getWindowHandles()) { idriver.switchTo().window(handle1); }

和控制被轉移到這個彈出B.

現在的問題是我想對等維護是從父窗口切換到彈出一個,然後制定一個彈出C,但代碼從彈出式菜單A彈出B不起作用。

該控件留在彈出窗口B上,並沒有被傳送到窗口C.請幫助。我使用Java,硒,Win 8,IE 10.

回答

1

我認爲在idriver.getWindowHandles()是你的父窗口...你需要排除現有的窗口。

public String popupHandle(List<String> existingWindowHandles) { 
    String popupHandle = null; 
    Set<String> windowHandles = driver.getWindowHandles(); 
    for (String handle : windowHandles) { 
     for (String existingWindowHandle : existingWindowHandles) { 
      if (!handle.equals(existingWindowHandle)) { 
       popupHandle = handle; 
       break; 
      } 
     } 
    } 
    return popupHandle; 
} 

使用:

List<String> ignoreWindows = new ArrayList<String>(); 
String parentWindow = idriver.getWindowHandle(); 
ignoreWindows.add(parentWindow) 
String popUpWindow = popupHandle(ignoreWindows); 
idriver.switchTo().window(popUpWindow); 
String currentWindow = idriver.getWindowHandle(); 
ignoreWindows.add(currentWindow); 
// doing your code 
// new popup appears 
popUpWindow = popupHandle(ignoreWindows); 
idriver.switchTo().window(popUpWindow); 

我認爲這會幫助你,祝你好運。 P.S.我沒有嘗試它,對不起,我沒有附近的硬件來嘗試它。

0

我已經使用了以下和它的工作對我來說:

`String windowTitle = "Popup C"; 
       Set<String> handles = idriver.getWindowHandles(); 

       for (String window : handles) { 
        Thread.sleep(200); 
        idriver.switchTo().window(window); 
        Set<String> mhandles = idriver.getWindowHandles(); 
        for (String mwindow : mhandles) { 

        idriver.switchTo().window(mwindow); 
        System.out.println("Im in"); 
        Thread.sleep(200); 
        if (idriver.getTitle().contains(windowTitle)) { 
         idriver.switchTo().window(mwindow); 
         System.out.println(windowTitle); 
         break; 
        } 
        } 
       }` 

,如果任何人有更好的建議,請隨時補充。謝謝