kameleon 0.0.9 → 0.2.0.alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/LICENCE +1 -1
- data/README.textile +157 -0
- data/lib/kameleon.rb +3 -18
- data/lib/kameleon/dsl.rb +98 -0
- data/lib/kameleon/dsl/act/form.rb +106 -0
- data/lib/kameleon/dsl/act/mouse.rb +59 -0
- data/lib/kameleon/dsl/context/scope.rb +95 -0
- data/lib/kameleon/dsl/utils/debug.rb +10 -0
- data/lib/kameleon/dsl/verify/absence.rb +151 -0
- data/lib/kameleon/dsl/verify/presence.rb +327 -0
- data/lib/kameleon/ext/active_record/shared_single_connection.rb +42 -0
- data/lib/kameleon/ext/capybara/server.rb +21 -0
- data/lib/kameleon/ext/capybara/session_pool.rb +63 -0
- data/lib/kameleon/ext/rspec/all.rb +4 -0
- data/lib/kameleon/ext/rspec/dsl.rb +39 -0
- data/lib/kameleon/ext/rspec/garbage_collector.rb +11 -0
- data/lib/kameleon/ext/rspec/headless.rb +12 -0
- data/lib/kameleon/ext/rspec/pool.rb +7 -0
- data/lib/kameleon/ext/rspec/transactional_examples.rb +10 -0
- data/{spec/support/deferred_garbage_collection.rb → lib/kameleon/ext/ruby/deferred_garbage_collector.rb} +0 -0
- data/lib/kameleon/ext/session/devise.rb +28 -0
- data/lib/kameleon/session.rb +23 -0
- data/lib/kameleon/utils/configuration.rb +5 -5
- data/lib/kameleon/utils/debug_console.rb +31 -0
- metadata +73 -77
- data/lib/kameleon/dsl/act.rb +0 -107
- data/lib/kameleon/dsl/see.rb +0 -155
- data/lib/kameleon/session/capybara.rb +0 -33
- data/lib/kameleon/session/server.rb +0 -21
- data/lib/kameleon/session/session_pool.rb +0 -45
- data/lib/kameleon/user/abstract.rb +0 -142
- data/lib/kameleon/user/base.rb +0 -36
- data/lib/kameleon/user/guest.rb +0 -10
- data/lib/kameleon/utils/helpers.rb +0 -11
- data/lib/patch/capybara_selenium_driver.rb +0 -7
- data/spec/sample_rack_app/hey.rb +0 -24
- data/spec/spec_helper.rb +0 -41
- data/spec/unit/act/click_spec.rb +0 -52
- data/spec/unit/act/fill_in/attach_file_spec.rb +0 -36
- data/spec/unit/act/fill_in/checkbox_spec.rb +0 -87
- data/spec/unit/act/fill_in/date_ranges_spec.rb +0 -24
- data/spec/unit/act/fill_in/multiple_select_spec.rb +0 -42
- data/spec/unit/act/fill_in/radio_button_spec.rb +0 -35
- data/spec/unit/act/fill_in/select_spec.rb +0 -35
- data/spec/unit/act/fill_in/text_area_spec.rb +0 -52
- data/spec/unit/act/fill_in/text_input_spec.rb +0 -52
- data/spec/unit/act/on_hover_spec.rb +0 -34
- data/spec/unit/dsl/not_see/form_elements/fields/empty_spec.rb +0 -38
- data/spec/unit/dsl/not_see/form_elements/fields/readonly_spec.rb +0 -38
- data/spec/unit/dsl/not_see/form_elements/fields_spec.rb +0 -24
- data/spec/unit/dsl/not_see/form_elements/textareas_spec.rb +0 -25
- data/spec/unit/dsl/not_see/form_elements/texts_spec.rb +0 -26
- data/spec/unit/dsl/not_see/in_scopes_spec.rb +0 -63
- data/spec/unit/dsl/not_see/special_elements/buttons_spec.rb +0 -24
- data/spec/unit/dsl/not_see/special_elements/error_message_for_spec.rb +0 -24
- data/spec/unit/dsl/not_see/special_elements/images_spec.rb +0 -24
- data/spec/unit/dsl/not_see/special_elements/links_spec.rb +0 -46
- data/spec/unit/dsl/not_see/special_elements/ordered_texts_spec.rb +0 -21
- data/spec/unit/dsl/not_see/special_selectors_spec.rb +0 -39
- data/spec/unit/dsl/not_see/texts_spec.rb +0 -24
- data/spec/unit/dsl/see/counted_elements_spec.rb +0 -26
- data/spec/unit/dsl/see/form_elements/checkboxes_spec.rb +0 -45
- data/spec/unit/dsl/see/form_elements/fields/disabled_spec.rb +0 -30
- data/spec/unit/dsl/see/form_elements/fields/empty_spec.rb +0 -28
- data/spec/unit/dsl/see/form_elements/fields/readonly_spec.rb +0 -38
- data/spec/unit/dsl/see/form_elements/fields_spec.rb +0 -28
- data/spec/unit/dsl/see/form_elements/multiple_selects_spec.rb +0 -47
- data/spec/unit/dsl/see/form_elements/radio_buttons_spec.rb +0 -35
- data/spec/unit/dsl/see/form_elements/selects_spec.rb +0 -40
- data/spec/unit/dsl/see/form_elements/textareas_spec.rb +0 -29
- data/spec/unit/dsl/see/form_elements/texts_spec.rb +0 -29
- data/spec/unit/dsl/see/in_scopes_spec.rb +0 -85
- data/spec/unit/dsl/see/special_elements/buttons_spec.rb +0 -28
- data/spec/unit/dsl/see/special_elements/error_message_for_spec.rb +0 -24
- data/spec/unit/dsl/see/special_elements/images_spec.rb +0 -28
- data/spec/unit/dsl/see/special_elements/links_spec.rb +0 -55
- data/spec/unit/dsl/see/special_elements/ordered_texts_spec.rb +0 -21
- data/spec/unit/dsl/see/special_selectors_spec.rb +0 -57
- data/spec/unit/dsl/see/texts_spec.rb +0 -24
- data/spec/unit/guest_spec.rb +0 -46
- data/spec/unit/user_base_spec.rb +0 -13
data/lib/kameleon/dsl/act.rb
DELETED
@@ -1,107 +0,0 @@
|
|
1
|
-
module Kameleon
|
2
|
-
module Dsl
|
3
|
-
module Act
|
4
|
-
include Kameleon::Utils
|
5
|
-
|
6
|
-
def click(*links)
|
7
|
-
links.each do |link|
|
8
|
-
case link.class.name
|
9
|
-
when 'String'
|
10
|
-
session.click_on(link)
|
11
|
-
when 'Hash'
|
12
|
-
link.each_pair do |what, locator|
|
13
|
-
case what
|
14
|
-
when :image
|
15
|
-
session.find(:xpath, "//img[@alt=\"#{locator}\"").click
|
16
|
-
when :and_accept
|
17
|
-
if session.driver.is_a?(Capybara::Selenium::Driver)
|
18
|
-
#! js hack - problem with selenium native alerts usage
|
19
|
-
#! it switch to allert but no reaction on accept or dismiss
|
20
|
-
session.evaluate_script("window.alert = function(msg) { return true; }")
|
21
|
-
session.evaluate_script("window.confirm = function(msg) { return true; }")
|
22
|
-
end
|
23
|
-
click(locator)
|
24
|
-
# session.driver.browser.switch_to.alert.accept if session.driver.is_a?(Capybara::Selenium::Driver)
|
25
|
-
when :and_dismiss
|
26
|
-
if session.driver.is_a?(Capybara::Selenium::Driver)
|
27
|
-
session.evaluate_script("window.alert = function(msg) { return true; }")
|
28
|
-
session.evaluate_script("window.confirm = function(msg) { return false; }")
|
29
|
-
end
|
30
|
-
click(locator)
|
31
|
-
# session.driver.browser.switch_to.alert.dismiss if session.driver.is_a?(Capybara::Selenium::Driver)
|
32
|
-
else
|
33
|
-
raise("User do not know how to click #{what} - you need to teach him how")
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
def fill_in(locators)
|
41
|
-
fill(locators) if can_fill?(locators)
|
42
|
-
end
|
43
|
-
|
44
|
-
private
|
45
|
-
|
46
|
-
def fill(locators)
|
47
|
-
locators.each_pair do |value, selector|
|
48
|
-
case value
|
49
|
-
when :check, :choose, :uncheck
|
50
|
-
one_or_all(selector).each do |locator|
|
51
|
-
session.send(value, locator)
|
52
|
-
end
|
53
|
-
when :select, :unselect
|
54
|
-
selector.each_pair do |select_value, select_locator|
|
55
|
-
one_or_all(select_locator).each do |locator|
|
56
|
-
session.send(value, select_value, :from => locator)
|
57
|
-
end
|
58
|
-
end
|
59
|
-
when :attach
|
60
|
-
selector.each_pair do |file_path, locator|
|
61
|
-
session.attach_file(locator, get_full_test_asset_path(file_path))
|
62
|
-
end
|
63
|
-
else
|
64
|
-
one_or_all(selector).each do |locator|
|
65
|
-
session.fill_in(locator, :with => value)
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
def can_fill?(locators)
|
72
|
-
locators.values.each do |loc|
|
73
|
-
selectors = loc.respond_to?(:values) ? loc.values : loc
|
74
|
-
one_or_all(selectors).each do |selector|
|
75
|
-
return false if unmodifiable?(selector)
|
76
|
-
end
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
|
-
def unmodifiable?(locator)
|
81
|
-
field = session.find_field(locator)
|
82
|
-
case session.driver
|
83
|
-
when Capybara::Selenium::Driver
|
84
|
-
# In driver field attributes - disabled and readonly may be:
|
85
|
-
# 1) string - false or true
|
86
|
-
# 2) nil value
|
87
|
-
return eval(field[:disabled].to_s) || eval(field[:readonly].to_s)
|
88
|
-
when Capybara::RackTest::Driver
|
89
|
-
# In rack field attributes - disabled and readonly may be:
|
90
|
-
# 1) nil value
|
91
|
-
# 2) string - disabled or readonly
|
92
|
-
return field[:disabled] || field[:readonly]
|
93
|
-
end
|
94
|
-
end
|
95
|
-
|
96
|
-
def get_full_test_asset_path(file_path)
|
97
|
-
if File.file?(file_path)
|
98
|
-
file_path
|
99
|
-
elsif File.file?(Helpers.default_path_for_file(file_path))
|
100
|
-
Helpers.default_path_for_file(file_path)
|
101
|
-
else
|
102
|
-
raise "Sorry but we didn't found that file in: #{file_path}, neither #{Helpers.default_path_for_file(file_path)}"
|
103
|
-
end
|
104
|
-
end
|
105
|
-
end
|
106
|
-
end
|
107
|
-
end
|
data/lib/kameleon/dsl/see.rb
DELETED
@@ -1,155 +0,0 @@
|
|
1
|
-
module Kameleon
|
2
|
-
module Dsl
|
3
|
-
module See
|
4
|
-
def see(*content)
|
5
|
-
options = extract_options(content)
|
6
|
-
|
7
|
-
case options.class.name
|
8
|
-
when 'String'
|
9
|
-
session.should rspec_world.have_content(options)
|
10
|
-
when 'Array'
|
11
|
-
options.each do |content_part|
|
12
|
-
see(content_part)
|
13
|
-
end
|
14
|
-
when 'Hash'
|
15
|
-
options.each_pair do |value, locator|
|
16
|
-
case value.class.name
|
17
|
-
when 'Symbol'
|
18
|
-
case value
|
19
|
-
when :button, :buttons
|
20
|
-
one_or_all(locator).each do |selector|
|
21
|
-
session.should rspec_world.have_button(selector)
|
22
|
-
end
|
23
|
-
when :checked, :unchecked
|
24
|
-
one_or_all(locator).each do |selector|
|
25
|
-
session.should rspec_world.send("have_#{value.to_s}_field", selector)
|
26
|
-
end
|
27
|
-
when :disabled, :readonly
|
28
|
-
one_or_all(locator).each do |selector|
|
29
|
-
see :field => selector
|
30
|
-
case session.driver
|
31
|
-
when Capybara::Selenium::Driver
|
32
|
-
session.find_field(selector)[value].should == 'true'
|
33
|
-
when Capybara::RackTest::Driver
|
34
|
-
session.find_field(selector)[value].should ==(value.to_s)
|
35
|
-
end
|
36
|
-
end
|
37
|
-
when :empty
|
38
|
-
one_or_all(locator).each do |selector|
|
39
|
-
see :field => selector
|
40
|
-
session.find_field(selector).value.to_s.should == ''
|
41
|
-
end
|
42
|
-
when :error_message_for, :error_messages_for
|
43
|
-
one_or_all(locator).each do |selector|
|
44
|
-
session.find(:xpath, '//div[@id="error_explanation"]').should rspec_world.have_content(selector.capitalize)
|
45
|
-
end
|
46
|
-
when :field, :fields
|
47
|
-
one_or_all(locator).each do |selector|
|
48
|
-
session.should rspec_world.have_field(selector)
|
49
|
-
end
|
50
|
-
when :image, :images
|
51
|
-
one_or_all(locator).each do |selector|
|
52
|
-
session.should rspec_world.have_xpath("//img[@alt=\"#{selector}\"] | //img[@src=\"#{selector}\"]")
|
53
|
-
end
|
54
|
-
when :selected
|
55
|
-
locator.each_pair do |selected_value, selected_locator|
|
56
|
-
session.should rspec_world.have_select(selected_locator, :selected => selected_value)
|
57
|
-
end
|
58
|
-
when :unselected
|
59
|
-
locator.each_pair do |selected_value, selected_locator|
|
60
|
-
session.should rspec_world.have_no_select(selected_locator, :selected => selected_value)
|
61
|
-
end
|
62
|
-
when :link, :links
|
63
|
-
if locator.respond_to?(:each_pair)
|
64
|
-
locator.each_pair do |link_text, url|
|
65
|
-
session.should rspec_world.have_link(link_text, :href => url)
|
66
|
-
end
|
67
|
-
else
|
68
|
-
one_or_all(locator).each { |text| session.should rspec_world.have_link(text) }
|
69
|
-
end
|
70
|
-
when :ordered
|
71
|
-
#! we should extend this beyond simply text match (allow to pass full xpath)
|
72
|
-
nodes = session.all(:xpath, locator.collect { |n| "//node()[text()= \"#{n}\"]" }.join(' | '))
|
73
|
-
nodes.map(&:text).should == locator
|
74
|
-
else
|
75
|
-
raise("User can not see #{value} - you need to teach him how")
|
76
|
-
end
|
77
|
-
when 'Fixnum'
|
78
|
-
session.should ::Capybara::RSpecMatchers::HaveMatcher.new(*(get_selector(locator) << {:count => value}))
|
79
|
-
else
|
80
|
-
session.should rspec_world.have_field(locator, :with => value)
|
81
|
-
end
|
82
|
-
end
|
83
|
-
else
|
84
|
-
raise "Not Implemented Structure #{options} :: #{options.class}"
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
|
-
def not_see(*content)
|
89
|
-
options = extract_options(content)
|
90
|
-
|
91
|
-
case options.class.name
|
92
|
-
when 'String'
|
93
|
-
session.should_not rspec_world.have_content(options)
|
94
|
-
when 'Array'
|
95
|
-
options.each do |content_part|
|
96
|
-
session.should_not rspec_world.have_content(content_part)
|
97
|
-
end
|
98
|
-
when 'Hash'
|
99
|
-
options.each_pair do |value, locators|
|
100
|
-
case value
|
101
|
-
when :button, :buttons
|
102
|
-
one_or_all(locators).each do |selector|
|
103
|
-
session.should_not rspec_world.have_button(selector)
|
104
|
-
end
|
105
|
-
when :error_message_for, :error_messages_for
|
106
|
-
one_or_all(locators).each do |selector|
|
107
|
-
session.find(:xpath, '//div[@id="error_explanation"]').should_not rspec_world.have_content(selector.capitalize)
|
108
|
-
end
|
109
|
-
when :image, :images
|
110
|
-
one_or_all(locators).each do |selector|
|
111
|
-
session.should_not rspec_world.have_xpath("//img[@alt=\"#{selector}\"] | //img[@src=\"#{selector}\"]")
|
112
|
-
end
|
113
|
-
when :field, :fields
|
114
|
-
one_or_all(locators).each do |locator|
|
115
|
-
session.should_not rspec_world.have_field(locator)
|
116
|
-
end
|
117
|
-
when :link, :links
|
118
|
-
if locators.respond_to?(:each_pair)
|
119
|
-
locators.each_pair do |link_text, url|
|
120
|
-
session.should_not rspec_world.have_link(link_text, :href => url)
|
121
|
-
end
|
122
|
-
else
|
123
|
-
one_or_all(locators).each { |text| session.should_not rspec_world.have_link(text) }
|
124
|
-
end
|
125
|
-
when :ordered
|
126
|
-
nodes = session.all(:xpath, locators.collect { |n| "//node()[text()= \"#{n}\"]" }.join(' | '))
|
127
|
-
nodes.map(&:text).should_not == locators
|
128
|
-
when :readonly
|
129
|
-
one_or_all(locators).each do |selector|
|
130
|
-
see :field => selector
|
131
|
-
case session.driver
|
132
|
-
when Capybara::Selenium::Driver
|
133
|
-
session.find_field(selector)[value].should == 'false'
|
134
|
-
when Capybara::RackTest::Driver
|
135
|
-
session.find_field(selector)[value].should rspec_world.be_nil
|
136
|
-
end
|
137
|
-
end
|
138
|
-
when :empty
|
139
|
-
one_or_all(locators).each do |locator|
|
140
|
-
see :field => locator
|
141
|
-
session.find_field(locator).value.to_s.should_not == ''
|
142
|
-
end
|
143
|
-
else
|
144
|
-
one_or_all(locators).each do |locator|
|
145
|
-
session.should_not rspec_world.have_field(locator, :with => value)
|
146
|
-
end
|
147
|
-
end
|
148
|
-
end
|
149
|
-
else
|
150
|
-
raise "Not Implemented Structure #{options} :: #{options.class}"
|
151
|
-
end
|
152
|
-
end
|
153
|
-
end
|
154
|
-
end
|
155
|
-
end
|
@@ -1,33 +0,0 @@
|
|
1
|
-
module Kameleon
|
2
|
-
module Session
|
3
|
-
module Capybara
|
4
|
-
attr_accessor :driver_name
|
5
|
-
|
6
|
-
def set_session
|
7
|
-
@session = ::SessionPool.session(current_driver)
|
8
|
-
end
|
9
|
-
|
10
|
-
def refresh_page
|
11
|
-
case session.driver.class.name
|
12
|
-
when 'Capybara::Selenium::Driver', 'Capybara::RackTest::Driver'
|
13
|
-
visit session.driver.browser.current_url
|
14
|
-
when 'Capybara::Culerity::Driver'
|
15
|
-
session.driver.browser.refresh
|
16
|
-
else
|
17
|
-
raise 'unsupported driver'
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
private
|
22
|
-
|
23
|
-
def current_session
|
24
|
-
::Capybara.current_session
|
25
|
-
end
|
26
|
-
|
27
|
-
def current_driver
|
28
|
-
driver_name ||
|
29
|
-
::Capybara.current_driver
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
@@ -1,21 +0,0 @@
|
|
1
|
-
require 'singleton'
|
2
|
-
module Kameleon
|
3
|
-
module Session
|
4
|
-
class Server
|
5
|
-
include ::Singleton
|
6
|
-
class << self
|
7
|
-
def server(app)
|
8
|
-
@server ||= start_new_server(app)
|
9
|
-
end
|
10
|
-
|
11
|
-
private
|
12
|
-
|
13
|
-
def start_new_server(app)
|
14
|
-
rack_server = ::Capybara::Server.new(app)
|
15
|
-
rack_server.boot
|
16
|
-
rack_server
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
@@ -1,45 +0,0 @@
|
|
1
|
-
require 'singleton'
|
2
|
-
class SessionPool
|
3
|
-
include Singleton
|
4
|
-
class << self
|
5
|
-
attr_writer :nice
|
6
|
-
def session(driver)
|
7
|
-
take_idle(driver) || create(driver)
|
8
|
-
end
|
9
|
-
|
10
|
-
def release_all
|
11
|
-
idle.concat(busy)
|
12
|
-
busy.clear
|
13
|
-
end
|
14
|
-
|
15
|
-
protected
|
16
|
-
|
17
|
-
def idle
|
18
|
-
@idle ||= []
|
19
|
-
end
|
20
|
-
|
21
|
-
def busy
|
22
|
-
@busy ||= []
|
23
|
-
end
|
24
|
-
|
25
|
-
def take_idle(driver)
|
26
|
-
if session = find_idle(driver)
|
27
|
-
session.reset!
|
28
|
-
session.tap do |s|
|
29
|
-
idle.delete(s)
|
30
|
-
busy.push(s)
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
def find_idle(driver)
|
36
|
-
idle.detect { |session| session.mode == driver }
|
37
|
-
end
|
38
|
-
|
39
|
-
def create(driver)
|
40
|
-
::Capybara::Session.new(driver, ::Capybara.app).tap do |session|
|
41
|
-
busy.push(session)
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
@@ -1,142 +0,0 @@
|
|
1
|
-
module Kameleon
|
2
|
-
module User
|
3
|
-
class Abstract
|
4
|
-
attr_accessor :options
|
5
|
-
attr_accessor :rspec_world
|
6
|
-
|
7
|
-
include Kameleon::Session::Capybara
|
8
|
-
include Kameleon::Dsl::See
|
9
|
-
include Kameleon::Dsl::Act
|
10
|
-
|
11
|
-
def initialize(rspec_world, options={})
|
12
|
-
@rspec_world = rspec_world
|
13
|
-
@driver_name = options.delete(:driver)
|
14
|
-
@session_name = options.delete(:session_name)
|
15
|
-
@options = options
|
16
|
-
set_session
|
17
|
-
session.instance_eval do
|
18
|
-
def within(*args)
|
19
|
-
new_scope = if args.size == 1 && Capybara::Node::Base === args.first
|
20
|
-
args.first
|
21
|
-
elsif args.last == :select_multiple
|
22
|
-
case driver
|
23
|
-
when Capybara::Selenium::Driver
|
24
|
-
raise "So far Unsupported in this driver"
|
25
|
-
when Capybara::RackTest::Driver
|
26
|
-
node = find(*args)
|
27
|
-
native = Nokogiri::HTML.parse(html).xpath(args[1])
|
28
|
-
base = Capybara::RackTest::Node.new(driver, native)
|
29
|
-
::Capybara::Node::Element.new(self,
|
30
|
-
base,
|
31
|
-
node.parent,
|
32
|
-
node.instance_variable_get(:@selector))
|
33
|
-
end
|
34
|
-
else
|
35
|
-
find(*args)
|
36
|
-
end
|
37
|
-
begin
|
38
|
-
scopes.push(*new_scope)
|
39
|
-
yield
|
40
|
-
ensure
|
41
|
-
scopes.pop
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
yield if block_given?
|
46
|
-
after_initialization
|
47
|
-
end
|
48
|
-
|
49
|
-
def visit(page)
|
50
|
-
session.visit(page)
|
51
|
-
end
|
52
|
-
|
53
|
-
def will(&block)
|
54
|
-
default_selector ?
|
55
|
-
within(*default_selector, &block) :
|
56
|
-
instance_eval(&block)
|
57
|
-
end
|
58
|
-
|
59
|
-
def within(*selector, &block)
|
60
|
-
session.within(*get_selector(selector)) do
|
61
|
-
instance_eval(&block)
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
def page_areas
|
66
|
-
{}
|
67
|
-
end
|
68
|
-
|
69
|
-
def debug
|
70
|
-
session
|
71
|
-
end
|
72
|
-
|
73
|
-
#! it should be package into raw module
|
74
|
-
def page_element(selector)
|
75
|
-
session.find(*get_selector(selector))
|
76
|
-
end
|
77
|
-
|
78
|
-
def page_elements(selector)
|
79
|
-
session.all(*get_selector(selector))
|
80
|
-
end
|
81
|
-
|
82
|
-
private
|
83
|
-
|
84
|
-
def load_homepage?
|
85
|
-
!options[:skip_page_autoload]
|
86
|
-
end
|
87
|
-
|
88
|
-
def session
|
89
|
-
@session
|
90
|
-
end
|
91
|
-
|
92
|
-
def extract_options(opts)
|
93
|
-
if opts.size == 1
|
94
|
-
opts.first
|
95
|
-
else
|
96
|
-
opts
|
97
|
-
end
|
98
|
-
end
|
99
|
-
|
100
|
-
def after_initialization
|
101
|
-
# stub, should be implemented in subclass
|
102
|
-
end
|
103
|
-
|
104
|
-
def get_selector(selector)
|
105
|
-
if (selector.is_a?(Array) && selector.size == 1)
|
106
|
-
selector = selector.first
|
107
|
-
end
|
108
|
-
case selector
|
109
|
-
when Hash
|
110
|
-
selector.each_pair do |key, value|
|
111
|
-
case key
|
112
|
-
when :row
|
113
|
-
return [:xpath, "//tr[*='#{value}'][1]"]
|
114
|
-
when :column
|
115
|
-
position = session.all(:xpath, "//table//th").index { |n| n.text =~ /#{value}/ }
|
116
|
-
return [:xpath, ".//table//th[#{position + 1}] | .//table//td[#{position + 1}]", :select_multiple]
|
117
|
-
else
|
118
|
-
raise "not supported selectors"
|
119
|
-
end
|
120
|
-
end
|
121
|
-
when Symbol
|
122
|
-
page_areas[selector].is_a?(Array) ?
|
123
|
-
page_areas[selector] :
|
124
|
-
[Capybara.default_selector, page_areas[selector]]
|
125
|
-
when Array
|
126
|
-
selector
|
127
|
-
else
|
128
|
-
[Capybara.default_selector, selector]
|
129
|
-
end
|
130
|
-
end
|
131
|
-
|
132
|
-
def default_selector
|
133
|
-
page_areas[:main]
|
134
|
-
end
|
135
|
-
|
136
|
-
def one_or_all(elements)
|
137
|
-
elements.is_a?(Array) ? elements : [elements]
|
138
|
-
end
|
139
|
-
|
140
|
-
end
|
141
|
-
end
|
142
|
-
end
|