Created
March 14, 2013 11:41
-
-
Save ToJans/5160710 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Browser = require('zombie') | |
class Client | |
is_defined = (what) -> what != null && typeof what isnt 'undefined' | |
constructor: (base) -> | |
@base = base | |
@browser = new Browser() | |
guard_result_required: (selector,fn) => | |
selector = selector.selector if is_defined selector.selector | |
ret = fn(selector) | |
if ! is_defined(ret) | |
throw "Unable to find [#{selector}], body\n #{@browser.html()}" | |
ret | |
element: (selector) => @guard_result_required(selector, (x)=>@browser.query(x)) | |
elements: (selector) => @guard_result_required(selector, (x)=>@browser.queryAll(x)) | |
element_text: (selector) -> | |
selector = selector.selector if is_defined selector.selector | |
ret = @browser.text(selector) | |
ret | |
submit: (done,submit_button,data,allowed_statuscodes) => | |
pars = submit_button | |
cb = => | |
@browser.wait(pars.wait_in_Ms) if is_defined pars.wait_in_Ms | |
done() | |
todo = () => | |
if is_defined pars.submit_button | |
submit_button = pars.submit_button | |
data = pars.data unless is_defined data | |
allowed_statuscodes = pars.allowed_statuscodes unless is_defined allowed_statuscodes | |
for key,val in data | |
selector = "[input[name=#{key}]" | |
guard_result_required @browser.query(selector) | |
@browser.fill(selector,val) | |
@browser.pressButton(submit_button,@handle_visit(cb,allowed_statuscodes)) | |
if is_defined pars.url | |
@visit(todo ,pars.url,allowed_statuscodes) | |
else | |
todo() | |
visit: (cb,url,allowed_statuscodes) => | |
pars = url | |
url = pars.url if is_defined pars.url | |
allowed_statuscodes = pars.allowed_statuscodes unless is_defined allowed_statuscodes | |
@browser.visit(url, @handle_visit(cb,allowed_statuscodes,pars.wait_in_Ms)) | |
handle_visit: (cb,allowed_statuscodes,wait_in_Ms) => | |
=> | |
console.log allowed_statuscodes | |
allowed_statuscodes=[200] unless is_defined allowed_statuscodes | |
if(@browser.statusCode not in allowed_statuscodes) | |
try | |
message = @browser.querySelector('h1').textContent | |
stacktrace = @browser.querySelector('tbody pre').textContent | |
console.error(message, stacktrace) | |
catch exception | |
throw exception | |
@browser.wait(wait_in_Ms) if is_defined wait_in_Ms | |
cb() if is_defined cb | |
module.exports = Client |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment