浏览器窗口
当打开一个新的浏览器窗口时,您需要切换到该窗口才能与之交互。
简单切换
在大多数情况下,您只需要使用另一个窗口,因此,从 Watir 6.18 开始,使用 Browser#switch_window
是与该窗口交互的最简单方法。它只能在只有两个窗口的情况下使用,它只切换到另一个窗口,不需要额外的定位。只需在需要时切换回来即可。
browser.switch_window
browser.button(id: 'close').click
browser.switch_window
窗口位置
如果您需要使用多个窗口,或者想要比 #switch_window
更多的控制,那么您需要能够指定要使用的窗口。
有三种主要的窗口选择器
:title
- 通常是最简单的:url
- 通常与Regexp
值一起使用(参见下面的示例):element
- 唯一的元素可能是最不容易出错的(从 Watir 6.18 开始!)
browser.window(title: 'new window')
browser.window(url: /my_page\.html/)
browser.window(element: browser.div(id: 'my-element'))
不再支持按索引定位
WebDriver 规范不要求驱动程序以任何特定顺序提供打开窗口的列表。从早期版本的 Watir 开始,许多用户在代码中使用 browser.widows.last
或 browser.window(index: -1)
来表示“最近打开的浏览器”。但情况并非总是如此(尤其是在 Safari 和 Internet Explorer 中)。在 Watir 7 中,我们移除了对 :index
作为定位器以及从 Browser#windows
中索引的支持。大多数情况下,Browser#switch_window
就足够了,如果不够,您需要使用其他 3 个定位器之一。
窗口使用
指定要使用的窗口后,您需要切换到该窗口。这可以通过 #use
方法完成,可以使用或不使用代码块。在不使用代码块的情况下,您还可以使用 Watir 6.7 中引入的 Browser#original_window
方法。
browser.window(title: 'new window').use
browser.button(id: 'close').click
browser.original_window.use
使用代码块与窗口交互时,Watir 会自动切换回您开始使用的窗口。
browser.window(title: 'new window').use {
browser.button(id: 'close').click
}
窗口等待
使用窗口时,一个常见问题是窗口需要时间加载,因此同步一直很困难。从 Watir 6.18 开始,Watir 的所有等待功能都可用于窗口集合。例如,您可以通过等待特定数量的窗口来同步。
browser.link(id: 'create-new-window).click
browser.windows.wait_until(size: 2)
browser.switch_window
有关使用窗口的更多示例,请参阅 窗口切换规范。