在多个子弹出窗口之间切换控制

Switching control between multiple child popups

本文关键字:之间 控制 窗口 子弹      更新时间:2024-05-03

我有一个父窗口,它只有登录字段,我使用存储了它的控件

String parentWindow= idriver.getWindowHandle();

当输入登录凭据时,一个新的弹出窗口(比如"弹出窗口a")打开,我的应用程序在其中运行

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

现在,当我点击弹出窗口a中的一个按钮时,弹出窗口打开(比如"弹出窗口B"),我再次使用:

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

并且控制被转移到该弹出窗口B.

现在的问题是,我想切换到一个弹出窗口C,但从父窗口切换到弹出窗口a,然后从弹出窗口a切换到弹出菜单B的代码不起作用。

控件保留在弹出窗口B上,不会转移到窗口C。请帮助。我正在使用Java、selenium、Win 8、IE 10。

我认为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);

我想这会对你有所帮助,祝你好运。附言:我没有试过,对不起,我几乎没有硬件可以试。

我使用了以下内容,它对我有效:

`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;
                   }
                   }
               }`

如果有人有更好的建议,请随时补充。感谢