首页 > 解决方案 > 如何在 Selenium 中切换到子窗口的子窗口(窗口句柄和标题是动态的)?

问题描述

在一个应用程序中,有一个子窗口,它打开另一个窗口。总共有三个窗口。每个窗口的窗口句柄和标题都是动态的,它们在每个会话中都会改变。

所以我存储了父窗口和第一个子窗口的句柄,然后我调用了getWindowHandles方法,将所有句柄存储在一个集合中,删除了父窗口和第一个子窗口。集合中剩余的窗口句柄将是第三个窗口句柄。

Set<String> windowHandles = uiDriver().getDriver().getWindowHandles();
windowHandles.remove(parentHandle);
windowHandles.remove(firstChildHanlde);
String thirdChildHandle = windowHandles.toString();

如果您能帮助我以更方便的方式获取子窗口句柄,那将有很大帮助。

标签: javaseleniumselenium-webdriverwindowhandle

解决方案


对于处理窗口句柄的更通用方法,您可以Set在执行一些打开更多窗口的操作之前获取窗口句柄,执行该操作,然后获取Set窗口句柄,然后Set从“之后”中删除“之前” Set. 剩下的是在行动期间打开的窗户。

Set<String> beforeWindowHandles = uiDriver().getDriver().getWindowHandles();
// do something that opens a window
Set<String> afterWindowHandles = uiDriver().getDriver().getWindowHandles();
afterWindowHandles.removeAll(beforeWindowHandles);

现在afterWindowHandles只包含新打开的窗口。


推荐阅读