F# Canopy Закрыть всплывающее окно

Я тестирую веб-страницу с Canopy, у которой есть всплывающее окно. Кто-нибудь знает, есть ли способ с Canopy закрыть всплывающее окно?

В противном случае, я полагаю, это случай погружения в Selenium, чтобы справиться с этим?

1 ответ

Это не так уж сложно. Основной алгоритм:

  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
Другие вопросы по тегам