第一个窗口是否保证是主窗口?或者订单是随机的还是不一致的?
for (String handle : driver.getWindowHandles()) {
driver.switchTo().window(handle);
}
我无法找到有关窗口句柄顺序的任何信息,只是一种迭代它们的方法。我假设窗口句柄列表中的第一个将成为主窗口。
答案 0 :(得分:4)
根据当前的WebDriver API Specification:
6.3在Windows上迭代
getWindowHandles
包含每个打开的窗口句柄的数组 此会话中的窗口。此返回字符串数组必须包含 处理与浏览器会话关联的每个窗口,没有 其他。对于每个返回的窗口,处理javascript表达式 " window.top.closed" (或等效的)当时必须评估为假 该命令正在执行。
未定义数组元素的顺序,但可能是 通过迭代每个顶级浏览器窗口来确定 在迭代选项卡之前返回该窗口中的选项卡 下一个顶级浏览器窗口。
简而言之,不 - 没有保证订单。
答案 1 :(得分:2)
作为alecxe pointed out,句柄可以按任何顺序排列。
我通过在将Selenium指向要加载的第一页后立即保存句柄来解决知道哪个句柄是主窗口的问题<(此时句柄列表只包含一个句柄,这是主窗口),我保存此值以备将来使用。然后,当我稍后扫描句柄列表时,我将与我保存的值进行比较,并知道与它不匹配的句柄不是初始窗口。
如果您有可能打开其他窗口的某些测试,那么在测试套件中的测试之间“拆除”或“清理”代码时,这样做非常有用。使用我在这里描述的方法,您的拆卸代码可以是通用的,不用担心任何特定的测试是否实际打开其他窗口。