private T executeWithFrame()

in module/geb-core/src/main/groovy/geb/frame/DefaultFrameSupport.groovy [68:92]


    private <T> T executeWithFrame(frame, Page page, Closure<T> block) {
        def originalPage = browser.page
        browser.driver.switchTo().frame(frame)
        if (page) {
            browser.verifyAtImplicitly(page)
        }
        try {
            Closure cloned = block.clone()
            cloned.delegate = browser
            cloned.resolveStrategy = DELEGATE_FIRST
            cloned.call()
        } finally {
            browser.page(originalPage)
            def targetLocator = browser.driver.switchTo()
            try {
                targetLocator.parentFrame()
            } catch (WebDriverException e) {
                if (e.message.startsWith("Command not found") || e.message.startsWith("Unknown command")) {
                    targetLocator.defaultContent()
                } else {
                    throw e
                }
            }
        }
    }