3

我正在测试一个带有弹出窗口的 Canopy 网页。有谁知道 Canopy 是否可以关闭弹出窗口?

否则我想这是一个浸入 Selenium 来处理这个问题的案例?

4

1 回答 1

3

这并不太难。基本算法是:

  1. 在离开主测试线程之前获取窗口句柄
  2. 运行将弹出新窗口的代码
  3. 把那个窗口带到最前面
  4. 在弹出窗口中运行 browser.Close()
  5. 切换回原来的窗口

在代码中:

let origWindow = browser.CurrentWindowHandle
// do something to open another window
// make the new window the focus of tests
let newWindow = browser.WindowHandles |> Seq.find (fun w -> w <> origWindow )
browser.SwitchTo().Window(newWindow) |> ignore
// optionally do asserts on the contents of the new window
// close the new window
browser.Close()
// switch back to the original window
browser.SwitchTo().Window(origWindow) |> ignore

假设这是您可能想要多次执行的操作,您可以重构为以下库函数:

let switchToWindow window =
    browser.SwitchTo().Window(window) |> ignore

let getOtherWindow currentWindow =
    browser.WindowHandles |> Seq.find (fun w -> w <> currentWindow)

let switchToOtherWindow currentWindow =
    switchToWindow (getOtherWindow currentWindow) |> ignore

let closeOtherWindow currentWindow =
    switchToOtherWindow currentWindow
    browser.Close()

原来的例子可以重写:

let origWindow = browser.CurrentWindowHandle
// do something to open another window
// make the new window the focus of tests
switchToOtherWindow origWindow 
// optionally do asserts on the contents of the new window
// close the new window
closeOtherWindow origWindow 
// switch back to the original window
switchToWindow origWindow
于 2014-11-18T01:43:29.350 回答