Skip to content

Commit

Permalink
Merge pull request teampoltergeist#416 from pedrocarrico/master
Browse files Browse the repository at this point in the history
Update capybara dependency
  • Loading branch information
route committed Dec 3, 2013
2 parents 852b78a + 38508f7 commit 3a676d6
Show file tree
Hide file tree
Showing 13 changed files with 86 additions and 5 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Expand Up @@ -5,6 +5,7 @@
* Added ability to set paper_size via a driver setter (Philippe Lehoux)
* Can support Basic HTTP authentication
* Added basic implementation of `send_keys`
* Added ability to go_back, go_forward, set the contents of a contenteditable element and Capybara 2.2 support (Pedro Carriço)

#### Bug fixes ####
* Use `Capybara::Helpers.normalize_whitespace` in filter_text to strip unicode
Expand Down
12 changes: 12 additions & 0 deletions lib/capybara/poltergeist/browser.rb
Expand Up @@ -66,6 +66,10 @@ def visible_text(page_id, id)
command 'visible_text', page_id, id
end

def delete_text(page_id, id)
command 'delete_text', page_id, id
end

def attribute(page_id, id, name)
command 'attribute', page_id, id, name.to_s
end
Expand Down Expand Up @@ -277,6 +281,14 @@ def command(name, *args)
raise
end

def go_back
command 'go_back'
end

def go_forward
command 'go_forward'
end

private

def log(message)
Expand Down
6 changes: 6 additions & 0 deletions lib/capybara/poltergeist/client/agent.coffee
Expand Up @@ -141,6 +141,12 @@ class PoltergeistAgent.Node
else
@element.innerText

deleteText: ->
range = document.createRange()
range.selectNodeContents(@element)
window.getSelection().addRange(range)
window.getSelection().deleteFromDocument()

getAttribute: (name) ->
if name == 'checked' || name == 'selected'
@element[name]
Expand Down
11 changes: 11 additions & 0 deletions lib/capybara/poltergeist/client/browser.coffee
Expand Up @@ -121,6 +121,9 @@ class Poltergeist.Browser
visible_text: (page_id, id) ->
this.sendResponse this.node(page_id, id).visibleText()

delete_text: (page_id, id) ->
this.sendResponse this.node(page_id, id).deleteText()

attribute: (page_id, id, name) ->
this.sendResponse this.node(page_id, id).getAttribute(name)

Expand Down Expand Up @@ -361,3 +364,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)
8 changes: 8 additions & 0 deletions lib/capybara/poltergeist/client/compiled/agent.js
Expand Up @@ -233,6 +233,14 @@ PoltergeistAgent.Node = (function() {
}
};

Node.prototype.deleteText = function() {
var range;
range = document.createRange();
range.selectNodeContents(this.element);
window.getSelection().addRange(range);
return window.getSelection().deleteFromDocument();
};

Node.prototype.getAttribute = function(name) {
if (name === 'checked' || name === 'selected') {
return this.element[name];
Expand Down
18 changes: 18 additions & 0 deletions lib/capybara/poltergeist/client/compiled/browser.js
Expand Up @@ -153,6 +153,10 @@ Poltergeist.Browser = (function() {
return this.sendResponse(this.node(page_id, id).visibleText());
};

Browser.prototype.delete_text = function(page_id, id) {
return this.sendResponse(this.node(page_id, id).deleteText());
};

Browser.prototype.attribute = function(page_id, id, name) {
return this.sendResponse(this.node(page_id, id).getAttribute(name));
};
Expand Down Expand Up @@ -481,6 +485,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;

})();
2 changes: 1 addition & 1 deletion lib/capybara/poltergeist/client/compiled/node.js
Expand Up @@ -4,7 +4,7 @@ Poltergeist.Node = (function() {
var name, _fn, _i, _len, _ref,
_this = this;

Node.DELEGATES = ['allText', 'visibleText', 'getAttribute', 'value', 'set', 'setAttribute', 'isObsolete', 'removeAttribute', 'isMultiple', 'select', 'tagName', 'find', 'isVisible', 'position', 'trigger', 'parentId', 'mouseEventTest', 'scrollIntoView', 'isDOMEqual', 'isDisabled'];
Node.DELEGATES = ['allText', 'visibleText', 'getAttribute', 'value', 'set', 'setAttribute', 'isObsolete', 'removeAttribute', 'isMultiple', 'select', 'tagName', 'find', 'isVisible', 'position', 'trigger', 'parentId', 'mouseEventTest', 'scrollIntoView', 'isDOMEqual', 'isDisabled', 'deleteText'];

function Node(page, id) {
this.page = page;
Expand Down
10 changes: 9 additions & 1 deletion lib/capybara/poltergeist/client/compiled/web_page.js
Expand Up @@ -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'];

Expand Down Expand Up @@ -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);
2 changes: 1 addition & 1 deletion lib/capybara/poltergeist/client/node.coffee
Expand Up @@ -4,7 +4,7 @@ class Poltergeist.Node
@DELEGATES = ['allText', 'visibleText', 'getAttribute', 'value', 'set', 'setAttribute', 'isObsolete',
'removeAttribute', 'isMultiple', 'select', 'tagName', 'find',
'isVisible', 'position', 'trigger', 'parentId', 'mouseEventTest',
'scrollIntoView', 'isDOMEqual', 'isDisabled']
'scrollIntoView', 'isDOMEqual', 'isDisabled', 'deleteText']

constructor: (@page, @id) ->

Expand Down
8 changes: 7 additions & 1 deletion lib/capybara/poltergeist/client/web_page.coffee
Expand Up @@ -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']

Expand Down Expand Up @@ -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
8 changes: 8 additions & 0 deletions lib/capybara/poltergeist/driver.rb
Expand Up @@ -262,5 +262,13 @@ def wait?
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
3 changes: 3 additions & 0 deletions lib/capybara/poltergeist/node.rb
Expand Up @@ -69,6 +69,9 @@ def set(value)
end
elsif tag_name == 'textarea'
command :set, value.to_s
elsif self[:contenteditable] == 'true'
command :delete_text
send_keys(value.to_s)
end
end

Expand Down
2 changes: 1 addition & 1 deletion poltergeist.gemspec
Expand Up @@ -18,7 +18,7 @@ Gem::Specification.new do |s|

s.required_ruby_version = '>= 1.9.3'

s.add_dependency 'capybara', '~> 2.1.0'
s.add_dependency 'capybara', '~> 2.1'
s.add_dependency 'websocket-driver', '>= 0.2.0'
s.add_dependency 'multi_json', '~> 1.0'
s.add_dependency 'cliver', '~> 0.3.1'
Expand Down

0 comments on commit 3a676d6

Please sign in to comment.