diff --git a/lib/capybara/poltergeist/browser.rb b/lib/capybara/poltergeist/browser.rb index a9402c5..51f3c93 100644 --- a/lib/capybara/poltergeist/browser.rb +++ b/lib/capybara/poltergeist/browser.rb @@ -277,6 +277,14 @@ module Capybara::Poltergeist raise end + def go_back + command 'go_back' + end + + def go_forward + command 'go_forward' + end + private def log(message) diff --git a/lib/capybara/poltergeist/client/browser.coffee b/lib/capybara/poltergeist/client/browser.coffee index b6252a0..e7b1704 100644 --- a/lib/capybara/poltergeist/client/browser.coffee +++ b/lib/capybara/poltergeist/client/browser.coffee @@ -361,3 +361,11 @@ class Poltergeist.Browser # This command is purely for testing error handling browser_error: -> throw new Error('zomg') + + go_back: -> + this.page.goBack() if this.page.canGoBack + this.sendResponse(true) + + go_forward: -> + this.page.goForward() if this.page.canGoForward + this.sendResponse(true) diff --git a/lib/capybara/poltergeist/client/compiled/browser.js b/lib/capybara/poltergeist/client/compiled/browser.js index f2b6443..55f1feb 100644 --- a/lib/capybara/poltergeist/client/compiled/browser.js +++ b/lib/capybara/poltergeist/client/compiled/browser.js @@ -481,6 +481,20 @@ Poltergeist.Browser = (function() { throw new Error('zomg'); }; + Browser.prototype.go_back = function() { + if (this.page.canGoBack) { + this.page.goBack(); + } + return this.sendResponse(true); + }; + + Browser.prototype.go_forward = function() { + if (this.page.canGoForward) { + this.page.goForward(); + } + return this.sendResponse(true); + }; + return Browser; })(); diff --git a/lib/capybara/poltergeist/client/compiled/web_page.js b/lib/capybara/poltergeist/client/compiled/web_page.js index 4c2f609..0260d8b 100644 --- a/lib/capybara/poltergeist/client/compiled/web_page.js +++ b/lib/capybara/poltergeist/client/compiled/web_page.js @@ -6,7 +6,7 @@ Poltergeist.WebPage = (function() { WebPage.CALLBACKS = ['onAlert', 'onConsoleMessage', 'onLoadFinished', 'onInitialized', 'onLoadStarted', 'onResourceRequested', 'onResourceReceived', 'onError', 'onNavigationRequested', 'onUrlChanged', 'onPageCreated']; - WebPage.DELEGATES = ['open', 'sendEvent', 'uploadFile', 'release', 'render', 'renderBase64']; + WebPage.DELEGATES = ['open', 'sendEvent', 'uploadFile', 'release', 'render', 'renderBase64', 'goBack', 'goForward']; WebPage.COMMANDS = ['currentUrl', 'find', 'nodeCall', 'documentSize', 'beforeUpload', 'afterUpload']; @@ -391,6 +391,14 @@ Poltergeist.WebPage = (function() { } }; + WebPage.prototype.canGoBack = function() { + return this["native"].canGoBack; + }; + + WebPage.prototype.canGoForward = function() { + return this["native"].canGoForward; + }; + return WebPage; }).call(this); diff --git a/lib/capybara/poltergeist/client/web_page.coffee b/lib/capybara/poltergeist/client/web_page.coffee index 41f7a46..50e2e86 100644 --- a/lib/capybara/poltergeist/client/web_page.coffee +++ b/lib/capybara/poltergeist/client/web_page.coffee @@ -3,7 +3,7 @@ class Poltergeist.WebPage 'onLoadStarted', 'onResourceRequested', 'onResourceReceived', 'onError', 'onNavigationRequested', 'onUrlChanged', 'onPageCreated'] - @DELEGATES = ['open', 'sendEvent', 'uploadFile', 'release', 'render', 'renderBase64'] + @DELEGATES = ['open', 'sendEvent', 'uploadFile', 'release', 'render', 'renderBase64', 'goBack', 'goForward'] @COMMANDS = ['currentUrl', 'find', 'nodeCall', 'documentSize', 'beforeUpload', 'afterUpload'] @@ -278,3 +278,9 @@ class Poltergeist.WebPage throw new Poltergeist.BrowserError(result.error.message, result.error.stack) else result.value + + canGoBack: -> + @native.canGoBack + + canGoForward: -> + @native.canGoForward diff --git a/lib/capybara/poltergeist/driver.rb b/lib/capybara/poltergeist/driver.rb index 5abf9d3..5aecb8e 100644 --- a/lib/capybara/poltergeist/driver.rb +++ b/lib/capybara/poltergeist/driver.rb @@ -262,5 +262,13 @@ module Capybara::Poltergeist def invalid_element_errors [Capybara::Poltergeist::ObsoleteNode, Capybara::Poltergeist::MouseEventFailed] end + + def go_back + browser.go_back + end + + def go_forward + browser.go_forward + end end end