java - 如何在 Selenium 中切换到子窗口的子窗口(窗口句柄和标题是动态的)?
问题描述
在一个应用程序中,有一个子窗口,它打开另一个窗口。总共有三个窗口。每个窗口的窗口句柄和标题都是动态的,它们在每个会话中都会改变。
所以我存储了父窗口和第一个子窗口的句柄,然后我调用了getWindowHandles方法,将所有句柄存储在一个集合中,删除了父窗口和第一个子窗口。集合中剩余的窗口句柄将是第三个窗口句柄。
Set<String> windowHandles = uiDriver().getDriver().getWindowHandles();
windowHandles.remove(parentHandle);
windowHandles.remove(firstChildHanlde);
String thirdChildHandle = windowHandles.toString();
如果您能帮助我以更方便的方式获取子窗口句柄,那将有很大帮助。
解决方案
对于处理窗口句柄的更通用方法,您可以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
只包含新打开的窗口。
推荐阅读
- docker - 如何解决docker容器内的权限被拒绝?
- shell - adb:找不到命令 - Window 10 shell
- android - 用于 Android 的 Qt 缺少编译器
- ruby-on-rails - 在没有开发选项的 Plesk 管理的机器上使用带有本机扩展的预编译 gem 时出错
- git - 参考 `remotes/origin/HEAD` 的用途是什么?
- uipangesturerecognizer - 如何在 panGesture 之后修复新的 textField 位置?
- sqlite - 如何在有序表中选择行并检索其上方和下方的行数?
- php - 在php中计算一个文件夹中所有文件和所有目录的总和
- scala - 在具有协变类型的 Scala 参数化类中实现方法
- python - 获取相关模型的数量