capykit 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +4 -0
- data/Rakefile +2 -0
- data/bin/capykit +36 -0
- data/capy/dsl_base.rb +179 -0
- data/capy/dsl_jquery.rb +21 -0
- data/capy/dsl_ref.rb +45 -0
- data/capy/dsl_util.rb +8 -0
- data/capykit.gemspec +28 -0
- data/lib/capykit/version.rb +3 -0
- data/lib/capykit.rb +13 -0
- data/pkg/capykit-0.0.1.gem +0 -0
- data/pkg/capykit-0.0.2.gem +0 -0
- metadata +98 -0
data/Gemfile
ADDED
data/Rakefile
ADDED
data/bin/capykit
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'capykit'
|
5
|
+
require 'irb'
|
6
|
+
|
7
|
+
CapybaraApi = Object.new
|
8
|
+
CapybaraApi.extend(Capybara)
|
9
|
+
(Capykit.constants-['VERSION']).sort.each do |c|
|
10
|
+
code="CapybaraApi.extend(Capykit::#{c})"; puts code
|
11
|
+
eval("CapybaraApi.extend(Capykit::#{c})")
|
12
|
+
end
|
13
|
+
CapybaraApi.auto_methods.each{ |m|CapybaraApi.send(m) }
|
14
|
+
|
15
|
+
puts "Capykit loaded..."
|
16
|
+
def IRB.start_capybara_console
|
17
|
+
IRB.setup(__FILE__)
|
18
|
+
|
19
|
+
irb = IRB::Irb.new(IRB::WorkSpace.new(CapybaraApi))
|
20
|
+
@CONF[:IRB_RC].call(irb.context) if @CONF[:IRB_RC]
|
21
|
+
@CONF[:MAIN_CONTEXT] = irb.context
|
22
|
+
|
23
|
+
trap("SIGINT") do
|
24
|
+
irb.signal_handle
|
25
|
+
end
|
26
|
+
|
27
|
+
begin
|
28
|
+
catch(:IRB_EXIT) do
|
29
|
+
irb.eval_input
|
30
|
+
end
|
31
|
+
ensure
|
32
|
+
irb_at_exit
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
IRB.start_capybara_console
|
data/capy/dsl_base.rb
ADDED
@@ -0,0 +1,179 @@
|
|
1
|
+
module Capykit::DslBase
|
2
|
+
|
3
|
+
def a(sym)
|
4
|
+
gselector(sym)
|
5
|
+
if !@selec
|
6
|
+
@selec=@pname=='*' ? "a[href*=#{@name[1,99]}]" : @name
|
7
|
+
end
|
8
|
+
@nodes = all(@selec)
|
9
|
+
selec_info('a',sym)
|
10
|
+
@value='0' if !@value
|
11
|
+
if @value.scan(/[^\d]+/)==[]
|
12
|
+
@node = @nodes[@value.to_i]
|
13
|
+
puts [' '*28,"@nodes[#{@value}]"].join
|
14
|
+
else
|
15
|
+
@node = @nodes.select{|x|x.text=~/#{@value}/}[0]
|
16
|
+
puts [' '*28,"@nodes.select{|x|x.text=~/#{@value}/}[0]"].join
|
17
|
+
end
|
18
|
+
@node.click
|
19
|
+
self
|
20
|
+
end
|
21
|
+
|
22
|
+
## Possible Keys
|
23
|
+
# :null, :cancel, :help, :backspace, :tab, :clear, :return, :enter, :shift, :left_shift, :control, :left_control :alt, :left_alt, :pause,
|
24
|
+
# :escape, :space:page_up, :page_down, :end, :home, :left, :arrow_left, :up:arrow_up, :right, :arrow_right:down, :arrow_down, :insert,
|
25
|
+
# :delete, :semicolon, :equals, :numpad0, :numpad1, :numpad2, :numpad3, :numpad4, :numpad5, :numpad6, :numpad7, :numpad8, :numpad9,
|
26
|
+
# :multiply, :add, :separator, :subtract, :decimal, :divide
|
27
|
+
#
|
28
|
+
def f(*arg)
|
29
|
+
arg.each do |sym|
|
30
|
+
find_fnode(sym)
|
31
|
+
end
|
32
|
+
self
|
33
|
+
end
|
34
|
+
|
35
|
+
def v(loc=:l,*oth)
|
36
|
+
params=[]
|
37
|
+
vsites=[]
|
38
|
+
status=" > v "
|
39
|
+
([loc]+oth).each do |sym|
|
40
|
+
if sym.class==Symbol
|
41
|
+
params<<":#{sym}"
|
42
|
+
vsites<<vsite[sym]
|
43
|
+
else
|
44
|
+
params<<"'#{sym}'"
|
45
|
+
vsites<<sym
|
46
|
+
end
|
47
|
+
end
|
48
|
+
location=''
|
49
|
+
location=page.current_url.split('/')[0,3].join('/') if vsites[0][0,1]=='/'
|
50
|
+
location<<vsites.join
|
51
|
+
status<<params.join(',')
|
52
|
+
status=[status,' '*25].join[0,25]
|
53
|
+
status<<" - v('#{location}')"
|
54
|
+
puts status
|
55
|
+
visit location
|
56
|
+
self
|
57
|
+
end
|
58
|
+
|
59
|
+
def w(sym,new_out=15)
|
60
|
+
gselector(sym)
|
61
|
+
@selec=@name if !@selec
|
62
|
+
selec_info('w',sym)
|
63
|
+
new_out=@value.to_i if @value
|
64
|
+
old_out = Capybara.default_wait_time
|
65
|
+
Capybara.default_wait_time = new_out
|
66
|
+
result=page.has_css?(@selec)
|
67
|
+
Capybara.default_wait_time = old_out
|
68
|
+
result
|
69
|
+
end
|
70
|
+
|
71
|
+
def x(sym,*arg)
|
72
|
+
runs=[]
|
73
|
+
exec=execute_methods(sym)
|
74
|
+
arg.each do |oth|
|
75
|
+
mul=(oth.to_s[-1,1]=='_')
|
76
|
+
rgx=mul ? /#{oth}/ : /#{oth}$/
|
77
|
+
runs+=exec.select{|pr|pr=~rgx}
|
78
|
+
end
|
79
|
+
p runs
|
80
|
+
runs.each do|xx|
|
81
|
+
met="x_k#{xx}"
|
82
|
+
puts met
|
83
|
+
self.send met
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
def xconf(xhash=nil)
|
88
|
+
@xconf||={}
|
89
|
+
@xconf =@xconf.merge xhash if xhash
|
90
|
+
@xconf
|
91
|
+
end
|
92
|
+
|
93
|
+
def vsite(xhash=nil)
|
94
|
+
if !@vsite
|
95
|
+
@vsite= {
|
96
|
+
:l => 'http://localhost:3000',
|
97
|
+
:f => 'http://facebook.com',
|
98
|
+
:g => 'http://google.com',
|
99
|
+
:y => 'http://yahoo.com',
|
100
|
+
:b => 'http://bing.com'}
|
101
|
+
end
|
102
|
+
@vsite = @vsite.merge xhash if xhash
|
103
|
+
@vsite
|
104
|
+
end
|
105
|
+
|
106
|
+
def aselector(xhash=nil)
|
107
|
+
if !@aselector
|
108
|
+
@aselector= {}
|
109
|
+
end
|
110
|
+
@aselector = @aselector.merge xhash if xhash
|
111
|
+
@aselector
|
112
|
+
end
|
113
|
+
|
114
|
+
protected
|
115
|
+
|
116
|
+
def gselector(sym)
|
117
|
+
spltr = sym.class == Symbol ? '_' : ':'
|
118
|
+
param = sym.to_s.split(spltr)
|
119
|
+
if param.length==1
|
120
|
+
spltr= ';'
|
121
|
+
param= sym.to_s.split(spltr)
|
122
|
+
param[1] = ";#{param[1]}" if param[1]
|
123
|
+
end
|
124
|
+
@name = param.shift
|
125
|
+
result = aselector[@name.to_sym]
|
126
|
+
@value = param==[] ? nil : param.join(spltr)
|
127
|
+
@selec = result ? result.split('|')[0] : nil
|
128
|
+
@nname = result ? result.split('|')[1] : nil
|
129
|
+
@pname = @name[0,1]
|
130
|
+
end
|
131
|
+
|
132
|
+
def selec_info(msg,sym)
|
133
|
+
msg<<(sym.class==Symbol ? " :#{sym}" : " '#{sym}'")
|
134
|
+
status=[" > #{msg}",' '*25].join[0,25]
|
135
|
+
status<<" - all('#{@selec}')"
|
136
|
+
status<<" - #{@nname}" if @nname
|
137
|
+
puts status
|
138
|
+
nil
|
139
|
+
end
|
140
|
+
|
141
|
+
def find_fnode(sym)
|
142
|
+
gselector(sym)
|
143
|
+
if !@selec
|
144
|
+
@selec= @pname=='*' ?
|
145
|
+
"[name*=#{@name[1,99]}]" :
|
146
|
+
"[name=#{@name}]"
|
147
|
+
end
|
148
|
+
selec_info('f',sym)
|
149
|
+
@node = all(@selec)[0]
|
150
|
+
send_keys
|
151
|
+
end
|
152
|
+
|
153
|
+
def send_keys
|
154
|
+
nvalue=@value
|
155
|
+
nvalue.sub!(/^[+]/,'')
|
156
|
+
pvalue =$~
|
157
|
+
avalue =nvalue.split(/;\w+/)
|
158
|
+
asymbol=nvalue.scan(/;(\w+)/)
|
159
|
+
combine=[]
|
160
|
+
avalue.each_with_index do |ss,ii|
|
161
|
+
combine<<ss
|
162
|
+
combine<<asymbol[ii][0].to_sym if asymbol[ii]
|
163
|
+
end
|
164
|
+
puts [' '*28,"send_keys(#{nvalue})"].join
|
165
|
+
@node.native.clear if avalue!=[] && !pvalue
|
166
|
+
@node.native.send_keys(*combine)
|
167
|
+
self
|
168
|
+
end
|
169
|
+
|
170
|
+
def je(script)
|
171
|
+
page.session.driver.evaluate_script script
|
172
|
+
end
|
173
|
+
|
174
|
+
def jx(script)
|
175
|
+
page.session.driver.execute_script script
|
176
|
+
self
|
177
|
+
end
|
178
|
+
|
179
|
+
end
|
data/capy/dsl_jquery.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
module Capykit::DslJquery
|
2
|
+
def h(sym,new_out=15)
|
3
|
+
gselector(sym)
|
4
|
+
@selec=@name if !@selec
|
5
|
+
selec_info('h',sym)
|
6
|
+
new_out=@value.to_i if @value
|
7
|
+
Capybara.timeout(new_out) do
|
8
|
+
je("$('#{@selec}').css('display')")!='block'
|
9
|
+
end
|
10
|
+
true
|
11
|
+
rescue
|
12
|
+
false
|
13
|
+
end
|
14
|
+
|
15
|
+
protected
|
16
|
+
|
17
|
+
def style_box_red(css)
|
18
|
+
jx "$('#{css}').attr('style','border:solid 5px red;')"
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
data/capy/dsl_ref.rb
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
module Capykit::DslRef
|
2
|
+
def base_methods
|
3
|
+
Capybara.methods - Object.methods
|
4
|
+
end
|
5
|
+
|
6
|
+
def core_methods
|
7
|
+
arr=Capykit::DslBase.public_instance_methods.sort
|
8
|
+
ar2=arr.select{|x|x.length==1}
|
9
|
+
ar2 + (arr-ar2)
|
10
|
+
end
|
11
|
+
|
12
|
+
def capy_methods
|
13
|
+
arr=modules_methods.sort!
|
14
|
+
ar2=arr.select{|x|x.length==1}
|
15
|
+
ar2 + (arr-ar2)
|
16
|
+
end
|
17
|
+
|
18
|
+
def auto_methods
|
19
|
+
arr=modules_methods.sort!
|
20
|
+
arr.select{|m|m=~/^(aselector_|vsite_)/}
|
21
|
+
end
|
22
|
+
|
23
|
+
def execute_methods(pr='')
|
24
|
+
ym="x_#{pr}"
|
25
|
+
mo=modules_methods.select{|x|x[0,ym.length]==ym}.sort!
|
26
|
+
pr=='' ? mo : mo.collect{|x|x[ym.length,99]}
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_methods(pr='')
|
30
|
+
ym="t_#{pr}"
|
31
|
+
mo=modules_methods.select{|x|x[0,ym.length]==ym}.sort!
|
32
|
+
pr=='' ? mo : mo.collect{|x|x[ym.length,99]}
|
33
|
+
end
|
34
|
+
|
35
|
+
protected
|
36
|
+
|
37
|
+
def modules_methods
|
38
|
+
arr=[]
|
39
|
+
(Capykit.constants-['VERSION']).each do |m|
|
40
|
+
arr+=eval("Capykit::#{m}.instance_methods")
|
41
|
+
end
|
42
|
+
arr
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
data/capy/dsl_util.rb
ADDED
data/capykit.gemspec
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "capykit/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.add_development_dependency "capybara", ["~> 0.4.1.2"]
|
7
|
+
s.name = "capykit"
|
8
|
+
s.version = Capykit::VERSION
|
9
|
+
s.platform = Gem::Platform::RUBY
|
10
|
+
s.authors = ["Widi Harsojo"]
|
11
|
+
s.email = ["wharsojo@gmail.com"]
|
12
|
+
s.homepage = "http://www.github.com/wharsojo"
|
13
|
+
s.summary = %q{Capybara mini dsl extension}
|
14
|
+
s.description = %q{Capybara mini dsl extension using webdriver and jquery}
|
15
|
+
|
16
|
+
s.required_rubygems_version = ">= 1.3.7"
|
17
|
+
s.rubyforge_project = "capykit"
|
18
|
+
|
19
|
+
s.files = Dir.glob("**/*").delete_if { |item| item.include?(".hg") }
|
20
|
+
|
21
|
+
#s.files = `git ls-files`.split("\n")
|
22
|
+
#s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
23
|
+
#s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
24
|
+
s.require_paths = ["lib"]
|
25
|
+
s.bindir = 'bin'
|
26
|
+
s.executables = ["capykit"]
|
27
|
+
s.default_executable = %q{capykit}
|
28
|
+
end
|
data/lib/capykit.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
#require 'bundler'
|
2
|
+
#Bundler.setup(:default, :test) if defined?(Bundler)
|
3
|
+
require "selenium-webdriver"
|
4
|
+
require 'capykit/version'
|
5
|
+
require 'capybara/dsl'
|
6
|
+
#Capybara.register_driver :selenium do |app|
|
7
|
+
# Capybara::Driver::Selenium.new(app, :browser => :firefox, :profile => "default")
|
8
|
+
#end
|
9
|
+
Capybara.default_driver = :selenium
|
10
|
+
Capybara.default_selector = :css
|
11
|
+
Capybara.default_wait_time = 5
|
12
|
+
files= Dir[File.join(File.dirname(__FILE__),%w[.. capy *.rb])]
|
13
|
+
(files+Dir[File.join(%w[. capy *.rb])]).each{ |f|require(f) }
|
Binary file
|
Binary file
|
metadata
ADDED
@@ -0,0 +1,98 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: capykit
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 27
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
- 2
|
10
|
+
version: 0.0.2
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Widi Harsojo
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2011-03-07 00:00:00 +07:00
|
19
|
+
default_executable: capykit
|
20
|
+
dependencies:
|
21
|
+
- !ruby/object:Gem::Dependency
|
22
|
+
name: capybara
|
23
|
+
prerelease: false
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
hash: 111
|
30
|
+
segments:
|
31
|
+
- 0
|
32
|
+
- 4
|
33
|
+
- 1
|
34
|
+
- 2
|
35
|
+
version: 0.4.1.2
|
36
|
+
type: :development
|
37
|
+
version_requirements: *id001
|
38
|
+
description: Capybara mini dsl extension using webdriver and jquery
|
39
|
+
email:
|
40
|
+
- wharsojo@gmail.com
|
41
|
+
executables:
|
42
|
+
- capykit
|
43
|
+
extensions: []
|
44
|
+
|
45
|
+
extra_rdoc_files: []
|
46
|
+
|
47
|
+
files:
|
48
|
+
- bin/capykit
|
49
|
+
- capy/dsl_base.rb
|
50
|
+
- capy/dsl_jquery.rb
|
51
|
+
- capy/dsl_ref.rb
|
52
|
+
- capy/dsl_util.rb
|
53
|
+
- capykit-0.0.2.gem
|
54
|
+
- capykit.gemspec
|
55
|
+
- Gemfile
|
56
|
+
- lib/capykit/version.rb
|
57
|
+
- lib/capykit.rb
|
58
|
+
- pkg/capykit-0.0.1.gem
|
59
|
+
- pkg/capykit-0.0.2.gem
|
60
|
+
- Rakefile
|
61
|
+
has_rdoc: true
|
62
|
+
homepage: http://www.github.com/wharsojo
|
63
|
+
licenses: []
|
64
|
+
|
65
|
+
post_install_message:
|
66
|
+
rdoc_options: []
|
67
|
+
|
68
|
+
require_paths:
|
69
|
+
- lib
|
70
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
71
|
+
none: false
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
hash: 3
|
76
|
+
segments:
|
77
|
+
- 0
|
78
|
+
version: "0"
|
79
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
80
|
+
none: false
|
81
|
+
requirements:
|
82
|
+
- - ">="
|
83
|
+
- !ruby/object:Gem::Version
|
84
|
+
hash: 21
|
85
|
+
segments:
|
86
|
+
- 1
|
87
|
+
- 3
|
88
|
+
- 7
|
89
|
+
version: 1.3.7
|
90
|
+
requirements: []
|
91
|
+
|
92
|
+
rubyforge_project: capykit
|
93
|
+
rubygems_version: 1.3.7
|
94
|
+
signing_key:
|
95
|
+
specification_version: 3
|
96
|
+
summary: Capybara mini dsl extension
|
97
|
+
test_files: []
|
98
|
+
|