我有一个父窗口,它只有登录字段,我使用:
存储了它的控件 String parentWindow= idriver.getWindowHandle();
当输入登录凭据时,会打开一个新的弹出窗口(比如说“弹出窗口A”),我的应用程序在其中运行。我已使用以下命令将控件切换到此“弹出窗口A”:
for (String handle1 : idriver.getWindowHandles()) {
idriver.switchTo().window(handle1);
}
现在,当我点击此弹出窗口A中的一个按钮时,会打开一个弹出窗口(比如“Popup B”),我再次使用:
for (String handle1 : idriver.getWindowHandles()) {
idriver.switchTo().window(handle1);
}
并将控件转移到此弹出窗口B.
问题是现在我想要切换到弹出窗口C,但是用于从父窗口切换到弹出窗口A然后从弹出窗口A切换到弹出窗口B的代码不起作用。
控件留在弹出窗口B上,不会转移到窗口C.请帮忙。我使用的是Java,selenium,Win 8,IE 10。
答案 0 :(得分: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);
我认为这会对你有所帮助,祝你好运。 附:我没有尝试对不起,我没有附近的硬件尝试它。
答案 1 :(得分: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;
}
}
}`
如果有人有更好的建议,请随时添加。感谢