watirsome 0.1.3 → 0.1.4
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.
- checksums.yaml +7 -0
- data/CHANGELOG.md +4 -0
- data/README.md +12 -10
- data/lib/watirsome/accessors.rb +17 -8
- data/lib/watirsome/version.rb +1 -1
- data/spec/lib/watirsome/accessors_spec.rb +9 -1
- data/spec/lib/watirsome/initializers_spec.rb +6 -6
- data/spec/lib/watirsome_spec.rb +19 -19
- data/spec/spec_helper.rb +7 -7
- data/spec/support/page.rb +5 -2
- data/spec/support/shared_examples/click_accessor.rb +16 -16
- data/spec/support/shared_examples/element_accessor.rb +18 -18
- data/spec/support/shared_examples/read_accessor.rb +24 -24
- data/spec/support/shared_examples/select_accessor.rb +14 -14
- data/spec/support/shared_examples/set_accessor.rb +18 -18
- data/watirsome.gemspec +1 -1
- metadata +23 -43
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: d8dd7d5de4e6d3bd01e4b28482988d65963424d1
|
4
|
+
data.tar.gz: fb3b3abc789fdb5237609ae41b98d035a31ab6d2
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: fc8eca156fa9928d4c1dd6644cda72e0749d3981e682e96ac3cf499e1853839935fa170f2750b7217c16498ec03252cc55fd6d91e9d627934dea6f0b3dbed492
|
7
|
+
data.tar.gz: 5ef5a76cc02b4c4d64230431871ae1c7c11cccf22787db111b862697417d7a7db176554e56343725ac2199db5738cf015895748b722e900f63629b27e8f2316a
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -79,22 +79,24 @@ page.svg_element # equals to @browser.element(tag_name: 'svg')
|
|
79
79
|
page.login_button # equals to @browser.button(class: 'submit', index: 1)
|
80
80
|
```
|
81
81
|
|
82
|
-
Watirsome also provides you with opportunity to locate elements by using any boolean method Watir element supports.
|
82
|
+
Watirsome also provides you with opportunity to locate elements by using any boolean method Watir element (and subelements) supports.
|
83
83
|
|
84
84
|
```ruby
|
85
85
|
class Page
|
86
86
|
include Watirsome
|
87
87
|
|
88
88
|
div :layer, class: 'layer', visible: true
|
89
|
-
span :wrapper,
|
89
|
+
span :wrapper, exists: false
|
90
|
+
select_list :country, selected: 'Please select country...'
|
90
91
|
end
|
91
92
|
|
92
93
|
page = Page.new(@browser)
|
93
|
-
page.layer_div
|
94
|
-
page.wrapper_span
|
94
|
+
page.layer_div # equals to @browser.divs(class: 'layer').find { |e| e.visible? == true }
|
95
|
+
page.wrapper_span # equals to @browser.spans.find { |e| e.exists? == false }
|
96
|
+
page.country_select_list # equals to @browser.select_lists.find { |e| e.selected?('Please select country...') }
|
95
97
|
```
|
96
98
|
|
97
|
-
You can also use proc/lambda/block to locate element. Block is executed in the context of
|
99
|
+
You can also use proc/lambda/block to locate element. Block is executed in the context of initialized page, so other accessors can be used.
|
98
100
|
|
99
101
|
```ruby
|
100
102
|
class Page
|
@@ -145,17 +147,17 @@ page.svg_element #=> #<Watir::HTMLElement:0x15288276ab771162 selector={
|
|
145
147
|
|
146
148
|
#### Readable accessors
|
147
149
|
|
148
|
-
For each
|
150
|
+
For each readable element, accessor method is defined which returns text of that element.
|
149
151
|
|
150
152
|
Read accessor method name is `element_name`.
|
151
153
|
|
152
|
-
Default
|
154
|
+
Default readable methods are: `[:div, :span, :p, :h1, :h2, :h3, :h4, :h5, :h6, :select_list, :text_field, :textarea]`.
|
153
155
|
|
154
|
-
You can make other elements
|
156
|
+
You can make other elements readable by adding tag names to `Watirsome.readable`.
|
155
157
|
|
156
158
|
```ruby
|
157
|
-
# make section
|
158
|
-
Watirsome.
|
159
|
+
# make section readable
|
160
|
+
Watirsome.readable << :section
|
159
161
|
|
160
162
|
class Page
|
161
163
|
include Watirsome
|
data/lib/watirsome/accessors.rb
CHANGED
@@ -52,7 +52,7 @@ module Watirsome
|
|
52
52
|
# @api private
|
53
53
|
#
|
54
54
|
def define_element_accessor(name, method, *args, &block)
|
55
|
-
watir_args, custom_args = extract_custom_args(args)
|
55
|
+
watir_args, custom_args = extract_custom_args(method, args)
|
56
56
|
define_method :"#{name}_#{method}" do |*opts|
|
57
57
|
if block_given?
|
58
58
|
instance_exec(*opts, &block)
|
@@ -73,7 +73,7 @@ module Watirsome
|
|
73
73
|
# @api private
|
74
74
|
#
|
75
75
|
def define_click_accessor(name, method, *args, &block)
|
76
|
-
watir_args, custom_args = extract_custom_args(args)
|
76
|
+
watir_args, custom_args = extract_custom_args(method, args)
|
77
77
|
define_method name do |*opts|
|
78
78
|
if block_given?
|
79
79
|
instance_exec(*opts, &block).click
|
@@ -98,7 +98,7 @@ module Watirsome
|
|
98
98
|
# @api private
|
99
99
|
#
|
100
100
|
def define_read_accessor(name, method, *args, &block)
|
101
|
-
watir_args, custom_args = extract_custom_args(args)
|
101
|
+
watir_args, custom_args = extract_custom_args(method, args)
|
102
102
|
define_method name do |*opts|
|
103
103
|
element = if block_given?
|
104
104
|
instance_exec(*opts, &block)
|
@@ -129,7 +129,7 @@ module Watirsome
|
|
129
129
|
# @api private
|
130
130
|
#
|
131
131
|
def define_set_accessor(name, method, *args, &block)
|
132
|
-
watir_args, custom_args = extract_custom_args(args)
|
132
|
+
watir_args, custom_args = extract_custom_args(method, args)
|
133
133
|
define_method :"#{name}=" do |*opts|
|
134
134
|
element = if block_given?
|
135
135
|
instance_exec(&block)
|
@@ -157,7 +157,7 @@ module Watirsome
|
|
157
157
|
# @api private
|
158
158
|
#
|
159
159
|
def define_select_accessor(name, method, *args, &block)
|
160
|
-
watir_args, custom_args = extract_custom_args(args)
|
160
|
+
watir_args, custom_args = extract_custom_args(method, args)
|
161
161
|
define_method :"#{name}=" do |*opts|
|
162
162
|
if block_given?
|
163
163
|
instance_exec(&block).select *opts
|
@@ -171,18 +171,19 @@ module Watirsome
|
|
171
171
|
# Extracts custom arguments which Watirsome gracefully handles from
|
172
172
|
# mixed array with Watir locators.
|
173
173
|
#
|
174
|
+
# @param [Symbol, String] method
|
174
175
|
# @param [Array] args
|
175
176
|
# @return Two arrays: Watir locators and custom locators
|
176
177
|
# @api private
|
177
178
|
#
|
178
|
-
def extract_custom_args(*args)
|
179
|
+
def extract_custom_args(method, *args)
|
179
180
|
identifier = args.shift
|
180
181
|
watir_args, custom_args = [], []
|
181
182
|
identifier.each_with_index do |hashes, index|
|
182
183
|
watir_arg, custom_arg = {}, {}
|
183
184
|
if hashes && !hashes.is_a?(Proc)
|
184
185
|
hashes.each do |k, v|
|
185
|
-
if Watir
|
186
|
+
if Watir.element_class_for(method).instance_methods.include? :"#{k}?"
|
186
187
|
custom_arg[k] = identifier[index][k]
|
187
188
|
else
|
188
189
|
watir_arg[k] = v
|
@@ -218,7 +219,15 @@ module Watirsome
|
|
218
219
|
plural = Watirsome.plural?(method)
|
219
220
|
method = Watirsome.pluralize(method) unless plural
|
220
221
|
elements = @browser.send(method, *watir_args)
|
221
|
-
custom_args.first.each
|
222
|
+
custom_args.first.each do |k, v|
|
223
|
+
elements.to_a.select! do |e|
|
224
|
+
if e.method(:"#{k}?").arity == 0
|
225
|
+
s.send(:"#{k}?") == v
|
226
|
+
else
|
227
|
+
e.send(:"#{k}?", v)
|
228
|
+
end
|
229
|
+
end
|
230
|
+
end
|
222
231
|
plural ? elements : elements.first
|
223
232
|
end
|
224
233
|
end
|
data/lib/watirsome/version.rb
CHANGED
@@ -3,10 +3,18 @@ require 'spec_helper'
|
|
3
3
|
describe Watirsome::Accessors do
|
4
4
|
include_context :page
|
5
5
|
include_context :element
|
6
|
-
|
6
|
+
|
7
7
|
it_defines :element_accessor, %w(div a text_field select_list)
|
8
8
|
it_defines :read_accessor, %w(div text_field select_list)
|
9
9
|
it_defines :click_accessor, %w(a)
|
10
10
|
it_defines :set_accessor, %w(text_field checkbox)
|
11
11
|
it_defines :select_accessor, %w(select_list)
|
12
|
+
|
13
|
+
it 'supports subtype custom locators' do
|
14
|
+
element2 = double('element')
|
15
|
+
expect(watir).to receive(:select_lists).with(id: 'select_list').and_return([element, element2])
|
16
|
+
expect(element).to receive(:selected?).with('Test').and_return(true)
|
17
|
+
expect(element2).to receive(:selected?).with('Test').and_return(false)
|
18
|
+
expect(page.select_list8_select_list).to eq(element)
|
19
|
+
end
|
12
20
|
end
|
@@ -7,32 +7,32 @@ describe Watirsome::Initializers do
|
|
7
7
|
it 'does not initalize page if there is no constructor defined' do
|
8
8
|
page = Page.dup
|
9
9
|
page.class_eval { remove_method :initialize_page }
|
10
|
-
page.
|
10
|
+
expect(page).not_to receive(:initialize_page)
|
11
11
|
page.new(watir)
|
12
12
|
end
|
13
13
|
|
14
14
|
it 'initializes page if there is constructor defined' do
|
15
|
-
page.instance_variable_get(:@initialized).
|
15
|
+
expect(page.instance_variable_get(:@initialized)).to eq(true)
|
16
16
|
end
|
17
17
|
|
18
18
|
it 'initalizes regions' do
|
19
|
-
Page.
|
19
|
+
expect_any_instance_of(Page).to receive(:initialize_regions)
|
20
20
|
Page.new(watir)
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
24
24
|
describe '#initialize_regions' do
|
25
25
|
it 'initalizes included regions' do
|
26
|
-
page.instance_variable_get(:@included_initialized).
|
26
|
+
expect(page.instance_variable_get(:@included_initialized)).to eq(1)
|
27
27
|
end
|
28
28
|
|
29
29
|
it 'initalizes extended regions' do
|
30
|
-
page.instance_variable_get(:@extended_initialized).
|
30
|
+
expect(page.instance_variable_get(:@extended_initialized)).to eq(1)
|
31
31
|
end
|
32
32
|
|
33
33
|
it 'caches initalized regions' do
|
34
34
|
page.initialize_regions
|
35
|
-
page.instance_variable_get(:@included_initialized).
|
35
|
+
expect(page.instance_variable_get(:@included_initialized)).to eq(1)
|
36
36
|
end
|
37
37
|
end
|
38
38
|
end
|
data/spec/lib/watirsome_spec.rb
CHANGED
@@ -5,15 +5,15 @@ describe Watirsome do
|
|
5
5
|
describe ".#{method}" do
|
6
6
|
it 'returns array of accessors' do
|
7
7
|
accessors = described_class.send(method)
|
8
|
-
accessors.
|
8
|
+
expect(accessors).to be_an(Array)
|
9
9
|
accessors.each do |accessor|
|
10
|
-
accessor.
|
10
|
+
expect(accessor).to be_a(Symbol)
|
11
11
|
end
|
12
12
|
end
|
13
13
|
|
14
14
|
it 'allows to add custom accessors' do
|
15
15
|
described_class.send(method) << :custom
|
16
|
-
described_class.send(method).
|
16
|
+
expect(described_class.send(method)).to include(:custom)
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
@@ -28,11 +28,11 @@ describe Watirsome do
|
|
28
28
|
end
|
29
29
|
|
30
30
|
it "returns true if element is #{method}" do
|
31
|
-
described_class.send(:"#{method}?", tag).
|
31
|
+
expect(described_class.send(:"#{method}?", tag)).to eq(true)
|
32
32
|
end
|
33
33
|
|
34
34
|
it "returns false if element is not #{method}" do
|
35
|
-
described_class.send(:"#{method}?", :foo).
|
35
|
+
expect(described_class.send(:"#{method}?", :foo)).to eq(false)
|
36
36
|
end
|
37
37
|
end
|
38
38
|
end
|
@@ -40,50 +40,50 @@ describe Watirsome do
|
|
40
40
|
describe '.watir_methods' do
|
41
41
|
it 'returns array of watir container methods' do
|
42
42
|
described_class.watir_methods.each do |method|
|
43
|
-
Watir::Container.instance_methods.
|
43
|
+
expect(Watir::Container.instance_methods).to include(method)
|
44
44
|
end
|
45
45
|
end
|
46
46
|
end
|
47
47
|
|
48
48
|
describe '.watirsome?' do
|
49
49
|
it 'returns true if method is watir-contained' do
|
50
|
-
described_class.watirsome?(:div).
|
50
|
+
expect(described_class.watirsome?(:div)).to eq(true)
|
51
51
|
end
|
52
52
|
|
53
53
|
it 'returns false if method is not watir-contained' do
|
54
|
-
described_class.watirsome?(:foo).
|
54
|
+
expect(described_class.watirsome?(:foo)).to eq(false)
|
55
55
|
end
|
56
56
|
end
|
57
57
|
|
58
58
|
describe '.plural?' do
|
59
59
|
it 'returns true if watir-contained method is plural with "s" ending' do
|
60
|
-
described_class.plural?(:divs).
|
60
|
+
expect(described_class.plural?(:divs)).to eq(true)
|
61
61
|
end
|
62
62
|
|
63
63
|
it 'returns true if watir-contained method is plural with "es" ending' do
|
64
|
-
described_class.plural?(:checkboxes).
|
64
|
+
expect(described_class.plural?(:checkboxes)).to eq(true)
|
65
65
|
end
|
66
66
|
|
67
67
|
it 'returns false if watir-contained method is singular' do
|
68
|
-
described_class.plural?(:div).
|
68
|
+
expect(described_class.plural?(:div)).to eq(false)
|
69
69
|
end
|
70
70
|
|
71
71
|
it 'returns false if method is not watir-contained' do
|
72
|
-
described_class.plural?(:foo).
|
72
|
+
expect(described_class.plural?(:foo)).to eq(false)
|
73
73
|
end
|
74
74
|
end
|
75
75
|
|
76
76
|
describe '.pluralize' do
|
77
77
|
it 'pluralizes method name with "s"' do
|
78
|
-
described_class.pluralize(:div).
|
78
|
+
expect(described_class.pluralize(:div)).to eq(:divs)
|
79
79
|
end
|
80
80
|
|
81
81
|
it 'pluralizes method name with "es"' do
|
82
|
-
described_class.pluralize(:checkbox).
|
82
|
+
expect(described_class.pluralize(:checkbox)).to eq(:checkboxes)
|
83
83
|
end
|
84
84
|
|
85
85
|
it 'raises error when cannot pluralizes method' do
|
86
|
-
|
86
|
+
expect { described_class.pluralize(:foo) }.to raise_error(Watirsome::Errors::CannotPluralizeError)
|
87
87
|
end
|
88
88
|
end
|
89
89
|
|
@@ -91,19 +91,19 @@ describe Watirsome do
|
|
91
91
|
include_context :page
|
92
92
|
|
93
93
|
it 'adds accessor class methods' do
|
94
|
-
page.class.
|
94
|
+
expect(page.class).to respond_to(:div)
|
95
95
|
end
|
96
96
|
|
97
97
|
it 'does not add #extract_selector' do
|
98
|
-
page.class.
|
98
|
+
expect(page.class).not_to respond_to(:extract_selector)
|
99
99
|
end
|
100
100
|
|
101
101
|
it 'adds accessor instance methods' do
|
102
|
-
page.private_methods.
|
102
|
+
expect(page.private_methods).to include(:grab_elements)
|
103
103
|
end
|
104
104
|
|
105
105
|
it 'adds regions initializer' do
|
106
|
-
page.
|
106
|
+
expect(page).to respond_to(:initialize_regions)
|
107
107
|
end
|
108
108
|
end
|
109
109
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -6,8 +6,8 @@ SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
|
|
6
6
|
Coveralls::SimpleCov::Formatter
|
7
7
|
]
|
8
8
|
SimpleCov.start do
|
9
|
-
add_filter "/spec/"
|
10
|
-
add_filter "/vendor/"
|
9
|
+
add_filter "/spec/"
|
10
|
+
add_filter "/vendor/"
|
11
11
|
end
|
12
12
|
|
13
13
|
require 'watir-webdriver'
|
@@ -19,13 +19,13 @@ end
|
|
19
19
|
|
20
20
|
RSpec.configure do |spec|
|
21
21
|
spec.alias_it_should_behave_like_to :it_defines, 'it defines'
|
22
|
-
|
22
|
+
|
23
23
|
shared_context :page do
|
24
|
-
let(:watir) {
|
25
|
-
let(:page) { Page.new(watir)
|
24
|
+
let(:watir) { double('watir') }
|
25
|
+
let(:page) { Page.new(watir) }
|
26
26
|
end
|
27
|
-
|
27
|
+
|
28
28
|
shared_context :element do
|
29
|
-
let(:element) {
|
29
|
+
let(:element) { double('element', visible?: true) }
|
30
30
|
end
|
31
31
|
end
|
data/spec/support/page.rb
CHANGED
@@ -40,10 +40,13 @@ class Page
|
|
40
40
|
# set/select accessor cannot have block arguments
|
41
41
|
case tag
|
42
42
|
when 'div', 'a'
|
43
|
-
send(tag, :"#{tag}7") { |id| @browser.send(tag, id: id) }
|
43
|
+
send(tag, :"#{tag}7") { |id| @browser.send(tag, id: id) }
|
44
44
|
when 'text_field', 'select_list'
|
45
|
-
send(tag, :"#{tag}7") { @browser.send(tag, id: tag) }
|
45
|
+
send(tag, :"#{tag}7") { @browser.send(tag, id: tag) }
|
46
46
|
end
|
47
47
|
end
|
48
48
|
|
49
|
+
# custom subtype locators
|
50
|
+
select_list :select_list8, id: 'select_list', selected: 'Test'
|
51
|
+
|
49
52
|
end # Page
|
@@ -1,51 +1,51 @@
|
|
1
1
|
shared_examples_for :click_accessor do |tags|
|
2
2
|
tags.each do |tag|
|
3
|
-
context tag do
|
3
|
+
context tag do
|
4
4
|
def accessor(tag, index, *args)
|
5
5
|
page.send :"#{tag}#{index}", *args
|
6
6
|
end
|
7
7
|
|
8
8
|
it 'clicks element with no locators' do
|
9
|
-
watir.
|
10
|
-
element.
|
9
|
+
expect(watir).to receive(tag).with(no_args).and_return(element)
|
10
|
+
expect(element).to receive(:click).with(any_args)
|
11
11
|
accessor(tag, 1)
|
12
12
|
end
|
13
13
|
|
14
14
|
it 'clicks element with single watir locator' do
|
15
|
-
watir.
|
16
|
-
element.
|
15
|
+
expect(watir).to receive(tag).with(id: tag).and_return(element)
|
16
|
+
expect(element).to receive(:click).with(any_args)
|
17
17
|
accessor(tag, 2)
|
18
18
|
end
|
19
19
|
|
20
20
|
it 'clicks element with multiple watir locator' do
|
21
|
-
watir.
|
22
|
-
element.
|
21
|
+
expect(watir).to receive(tag).with(id: tag, class: /#{tag}/).and_return(element)
|
22
|
+
expect(element).to receive(:click).with(any_args)
|
23
23
|
accessor(tag, 3)
|
24
24
|
end
|
25
25
|
|
26
26
|
it 'clicks element with custom locator' do
|
27
|
-
element2 =
|
27
|
+
element2 = double('element', visible?: false)
|
28
28
|
plural = Watirsome.pluralize(tag)
|
29
|
-
watir.
|
30
|
-
element.
|
29
|
+
expect(watir).to receive(plural).with(id: tag, class: tag).and_return([element, element2])
|
30
|
+
expect(element).to receive(:click).with(any_args)
|
31
31
|
accessor(tag, 4)
|
32
32
|
end
|
33
33
|
|
34
34
|
it 'clicks element with proc' do
|
35
|
-
watir.
|
36
|
-
element.
|
35
|
+
expect(watir).to receive(tag).with(id: tag).and_return(element)
|
36
|
+
expect(element).to receive(:click).with(any_args)
|
37
37
|
accessor(tag, 5)
|
38
38
|
end
|
39
39
|
|
40
40
|
it 'clicks element with lambda' do
|
41
|
-
watir.
|
42
|
-
element.
|
41
|
+
expect(watir).to receive(tag).with(id: tag).and_return(element)
|
42
|
+
expect(element).to receive(:click).with(any_args)
|
43
43
|
accessor(tag, 6)
|
44
44
|
end
|
45
45
|
|
46
46
|
it 'clicks element with block and custom arguments' do
|
47
|
-
watir.
|
48
|
-
element.
|
47
|
+
expect(watir).to receive(tag).with(id: tag).and_return(element)
|
48
|
+
expect(element).to receive(:click).with(any_args)
|
49
49
|
accessor(tag, 7, tag)
|
50
50
|
end
|
51
51
|
end
|
@@ -1,47 +1,47 @@
|
|
1
1
|
shared_examples_for :element_accessor do |tags|
|
2
2
|
tags.each do |tag|
|
3
|
-
context tag do
|
3
|
+
context tag do
|
4
4
|
def accessor(tag, index, *args)
|
5
5
|
page.send :"#{tag}#{index}_#{tag}", *args
|
6
6
|
end
|
7
7
|
|
8
8
|
it 'finds element with no locators' do
|
9
|
-
watir.
|
10
|
-
accessor(tag, 1).
|
9
|
+
expect(watir).to receive(tag).with(no_args).and_return(element)
|
10
|
+
expect(accessor(tag, 1)).to eq(element)
|
11
11
|
end
|
12
12
|
|
13
13
|
it 'finds element with single watir locator' do
|
14
|
-
watir.
|
15
|
-
accessor(tag, 2).
|
14
|
+
expect(watir).to receive(tag).with(id: tag).and_return(element)
|
15
|
+
expect(accessor(tag, 2)).to eq(element)
|
16
16
|
end
|
17
17
|
|
18
18
|
it 'finds element with multiple watir locator' do
|
19
|
-
watir.
|
20
|
-
accessor(tag, 3).
|
19
|
+
expect(watir).to receive(tag).with(id: tag, class: /#{tag}/).and_return(element)
|
20
|
+
expect(accessor(tag, 3)).to eq(element)
|
21
21
|
end
|
22
22
|
|
23
23
|
it 'finds element with custom locator' do
|
24
|
-
element2 =
|
24
|
+
element2 = double('element')
|
25
25
|
plural = Watirsome.pluralize(tag)
|
26
|
-
watir.
|
27
|
-
element.
|
28
|
-
element2.
|
29
|
-
accessor(tag, 4).
|
26
|
+
expect(watir).to receive(plural).with(id: tag, class: tag).and_return([element, element2])
|
27
|
+
expect(element).to receive(:visible?).and_return(true)
|
28
|
+
expect(element2).to receive(:visible?).and_return(false)
|
29
|
+
expect(accessor(tag, 4)).to eq(element)
|
30
30
|
end
|
31
31
|
|
32
32
|
it 'finds element with proc' do
|
33
|
-
watir.
|
34
|
-
accessor(tag, 5).
|
33
|
+
expect(watir).to receive(tag).with(id: tag).and_return(element)
|
34
|
+
expect(accessor(tag, 5)).to eq(element)
|
35
35
|
end
|
36
36
|
|
37
37
|
it 'finds element with lambda' do
|
38
|
-
watir.
|
39
|
-
accessor(tag, 6).
|
38
|
+
expect(watir).to receive(tag).with(id: tag).and_return(element)
|
39
|
+
expect(accessor(tag, 6)).to eq(element)
|
40
40
|
end
|
41
41
|
|
42
42
|
it 'finds element with block and custom arguments' do
|
43
|
-
watir.
|
44
|
-
accessor(tag, 7, tag).
|
43
|
+
expect(watir).to receive(tag).with(id: tag).and_return(element)
|
44
|
+
expect(accessor(tag, 7, tag)).to eq(element)
|
45
45
|
end
|
46
46
|
end
|
47
47
|
end
|
@@ -1,67 +1,67 @@
|
|
1
1
|
shared_examples_for :read_accessor do |tags|
|
2
2
|
tags.each do |tag|
|
3
|
-
context tag do
|
3
|
+
context tag do
|
4
4
|
def accessor(tag, index, *args)
|
5
5
|
page.send :"#{tag}#{index}", *args
|
6
6
|
end
|
7
|
-
|
7
|
+
|
8
8
|
def read_expectation(tag)
|
9
9
|
case tag
|
10
10
|
when 'text_field'
|
11
|
-
element.
|
11
|
+
expect(element).to receive(:value).and_return('text')
|
12
12
|
when 'select_list'
|
13
|
-
option1 =
|
14
|
-
option2 =
|
15
|
-
element.
|
16
|
-
option1.
|
17
|
-
option2.
|
13
|
+
option1 = double('option1', selected?: true)
|
14
|
+
option2 = double('option2', selected?: false)
|
15
|
+
expect(element).to receive(:options).and_return([option1, option2])
|
16
|
+
expect(option1).to receive(:text).and_return('text')
|
17
|
+
expect(option2).not_to receive(:text)
|
18
18
|
else
|
19
|
-
element.
|
19
|
+
expect(element).to receive(:text).and_return('text')
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
23
23
|
it 'gets text from element with no locators' do
|
24
|
-
watir.
|
24
|
+
expect(watir).to receive(tag).with(no_args).and_return(element)
|
25
25
|
read_expectation(tag)
|
26
|
-
accessor(tag, 1).
|
26
|
+
expect(accessor(tag, 1)).to eq('text')
|
27
27
|
end
|
28
28
|
|
29
29
|
it 'gets text from element with single watir locator' do
|
30
|
-
watir.
|
30
|
+
expect(watir).to receive(tag).with(id: tag).and_return(element)
|
31
31
|
read_expectation(tag)
|
32
|
-
accessor(tag, 2).
|
32
|
+
expect(accessor(tag, 2)).to eq('text')
|
33
33
|
end
|
34
34
|
|
35
35
|
it 'gets text from element with multiple watir locator' do
|
36
|
-
watir.
|
36
|
+
expect(watir).to receive(tag).with(id: tag, class: /#{tag}/).and_return(element)
|
37
37
|
read_expectation(tag)
|
38
|
-
accessor(tag, 3).
|
38
|
+
expect(accessor(tag, 3)).to eq('text')
|
39
39
|
end
|
40
40
|
|
41
41
|
it 'gets text from element with custom locator' do
|
42
|
-
element2 =
|
42
|
+
element2 = double('element', visible?: false)
|
43
43
|
plural = Watirsome.pluralize(tag)
|
44
|
-
watir.
|
44
|
+
expect(watir).to receive(plural).with(id: tag, class: tag).and_return([element, element2])
|
45
45
|
read_expectation(tag)
|
46
|
-
accessor(tag, 4).
|
46
|
+
expect(accessor(tag, 4)).to eq('text')
|
47
47
|
end
|
48
48
|
|
49
49
|
it 'gets text from element with proc' do
|
50
|
-
watir.
|
50
|
+
expect(watir).to receive(tag).with(id: tag).and_return(element)
|
51
51
|
read_expectation(tag)
|
52
|
-
accessor(tag, 5).
|
52
|
+
expect(accessor(tag, 5)).to eq('text')
|
53
53
|
end
|
54
54
|
|
55
55
|
it 'gets text from element with lambda' do
|
56
|
-
watir.
|
56
|
+
expect(watir).to receive(tag).with(id: tag).and_return(element)
|
57
57
|
read_expectation(tag)
|
58
|
-
accessor(tag, 6).
|
58
|
+
expect(accessor(tag, 6)).to eq('text')
|
59
59
|
end
|
60
60
|
|
61
61
|
it 'gets text from element with block and custom arguments' do
|
62
|
-
watir.
|
62
|
+
expect(watir).to receive(tag).with(id: tag).and_return(element)
|
63
63
|
read_expectation(tag)
|
64
|
-
accessor(tag, 7, tag).
|
64
|
+
expect(accessor(tag, 7, tag)).to eq('text')
|
65
65
|
end
|
66
66
|
end
|
67
67
|
end
|
@@ -1,45 +1,45 @@
|
|
1
1
|
shared_examples_for :select_accessor do |tags|
|
2
2
|
tags.each do |tag|
|
3
|
-
context tag do
|
3
|
+
context tag do
|
4
4
|
def accessor(tag, index, *args)
|
5
5
|
page.send :"#{tag}#{index}=", *args
|
6
6
|
end
|
7
7
|
|
8
8
|
it 'selects option for element with no locators' do
|
9
|
-
watir.
|
10
|
-
element.
|
9
|
+
expect(watir).to receive(tag).with(no_args).and_return(element)
|
10
|
+
expect(element).to receive(:select).with('value')
|
11
11
|
accessor(tag, 1, 'value')
|
12
12
|
end
|
13
13
|
|
14
14
|
it 'selects option for element with single watir locator' do
|
15
|
-
watir.
|
16
|
-
element.
|
15
|
+
expect(watir).to receive(tag).with(id: tag).and_return(element)
|
16
|
+
expect(element).to receive(:select).with('value')
|
17
17
|
accessor(tag, 2, 'value')
|
18
18
|
end
|
19
19
|
|
20
20
|
it 'selects option for element with multiple watir locator' do
|
21
|
-
watir.
|
22
|
-
element.
|
21
|
+
expect(watir).to receive(tag).with(id: tag, class: /#{tag}/).and_return(element)
|
22
|
+
expect(element).to receive(:select).with('value')
|
23
23
|
accessor(tag, 3, 'value')
|
24
24
|
end
|
25
25
|
|
26
26
|
it 'selects option for element with custom locator' do
|
27
|
-
element2 =
|
27
|
+
element2 = double('element', visible?: false)
|
28
28
|
plural = Watirsome.pluralize(tag)
|
29
|
-
watir.
|
30
|
-
element.
|
29
|
+
expect(watir).to receive(plural).with(id: tag, class: tag).and_return([element, element2])
|
30
|
+
expect(element).to receive(:select).with('value')
|
31
31
|
accessor(tag, 4, 'value')
|
32
32
|
end
|
33
33
|
|
34
34
|
it 'selects option for element with proc' do
|
35
|
-
watir.
|
36
|
-
element.
|
35
|
+
expect(watir).to receive(tag).with(id: tag).and_return(element)
|
36
|
+
expect(element).to receive(:select).with('value')
|
37
37
|
accessor(tag, 5, 'value')
|
38
38
|
end
|
39
39
|
|
40
40
|
it 'selects option for element with lambda' do
|
41
|
-
watir.
|
42
|
-
element.
|
41
|
+
expect(watir).to receive(tag).with(id: tag).and_return(element)
|
42
|
+
expect(element).to receive(:select).with('value')
|
43
43
|
accessor(tag, 6, 'value')
|
44
44
|
end
|
45
45
|
end
|
@@ -1,52 +1,52 @@
|
|
1
1
|
shared_examples_for :set_accessor do |tags|
|
2
2
|
tags.each do |tag|
|
3
|
-
context tag do
|
3
|
+
context tag do
|
4
4
|
def accessor(tag, index, *args)
|
5
5
|
page.send :"#{tag}#{index}=", *args
|
6
6
|
end
|
7
7
|
|
8
8
|
it 'sets value on element with no locators' do
|
9
|
-
watir.
|
10
|
-
element.
|
9
|
+
expect(watir).to receive(tag).with(no_args).and_return(element)
|
10
|
+
expect(element).to receive(:set).with('value')
|
11
11
|
accessor(tag, 1, 'value')
|
12
12
|
end
|
13
13
|
|
14
14
|
it 'sets value on element with single watir locator' do
|
15
|
-
watir.
|
16
|
-
element.
|
15
|
+
expect(watir).to receive(tag).with(id: tag).and_return(element)
|
16
|
+
expect(element).to receive(:set).with('value')
|
17
17
|
accessor(tag, 2, 'value')
|
18
18
|
end
|
19
19
|
|
20
20
|
it 'sets value on element with multiple watir locator' do
|
21
|
-
watir.
|
22
|
-
element.
|
21
|
+
expect(watir).to receive(tag).with(id: tag, class: /#{tag}/).and_return(element)
|
22
|
+
expect(element).to receive(:set).with('value')
|
23
23
|
accessor(tag, 3, 'value')
|
24
24
|
end
|
25
25
|
|
26
26
|
it 'sets value on element with custom locator' do
|
27
|
-
element2 =
|
27
|
+
element2 = double('element', visible?: false)
|
28
28
|
plural = Watirsome.pluralize(tag)
|
29
|
-
watir.
|
30
|
-
element.
|
29
|
+
expect(watir).to receive(plural).with(id: tag, class: tag).and_return([element, element2])
|
30
|
+
expect(element).to receive(:set).with('value')
|
31
31
|
accessor(tag, 4, 'value')
|
32
32
|
end
|
33
33
|
|
34
34
|
it 'sets value on element with proc' do
|
35
|
-
watir.
|
36
|
-
element.
|
35
|
+
expect(watir).to receive(tag).with(id: tag).and_return(element)
|
36
|
+
expect(element).to receive(:set).with('value')
|
37
37
|
accessor(tag, 5, 'value')
|
38
38
|
end
|
39
39
|
|
40
40
|
it 'sets value on element with lambda' do
|
41
|
-
watir.
|
42
|
-
element.
|
41
|
+
expect(watir).to receive(tag).with(id: tag).and_return(element)
|
42
|
+
expect(element).to receive(:set).with('value')
|
43
43
|
accessor(tag, 6, 'value')
|
44
44
|
end
|
45
|
-
|
45
|
+
|
46
46
|
it 'sends keys if element cannot be set' do
|
47
|
-
watir.
|
48
|
-
element.
|
49
|
-
element.
|
47
|
+
expect(watir).to receive(tag).with(no_args).and_return(element)
|
48
|
+
allow(element).to receive(:respond_to?).with(:set).and_return(false)
|
49
|
+
expect(element).to receive(:send_keys).with('value')
|
50
50
|
accessor(tag, 1, 'value')
|
51
51
|
end
|
52
52
|
end
|
data/watirsome.gemspec
CHANGED
@@ -16,7 +16,7 @@ Gem::Specification.new do |s|
|
|
16
16
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
17
17
|
s.require_paths = %w(lib)
|
18
18
|
|
19
|
-
s.add_dependency 'watir-webdriver'
|
19
|
+
s.add_dependency 'watir-webdriver', '>= 0.6.9'
|
20
20
|
|
21
21
|
s.add_development_dependency 'rspec'
|
22
22
|
s.add_development_dependency 'rake'
|
metadata
CHANGED
@@ -1,110 +1,97 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: watirsome
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
5
|
-
prerelease:
|
4
|
+
version: 0.1.4
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Alex Rodionov
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2014-04-13 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: watir-webdriver
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - ">="
|
20
18
|
- !ruby/object:Gem::Version
|
21
|
-
version:
|
19
|
+
version: 0.6.9
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
|
-
- -
|
24
|
+
- - ">="
|
28
25
|
- !ruby/object:Gem::Version
|
29
|
-
version:
|
26
|
+
version: 0.6.9
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: rspec
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
|
-
- -
|
31
|
+
- - ">="
|
36
32
|
- !ruby/object:Gem::Version
|
37
33
|
version: '0'
|
38
34
|
type: :development
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
|
-
- -
|
38
|
+
- - ">="
|
44
39
|
- !ruby/object:Gem::Version
|
45
40
|
version: '0'
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: rake
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
|
-
- -
|
45
|
+
- - ">="
|
52
46
|
- !ruby/object:Gem::Version
|
53
47
|
version: '0'
|
54
48
|
type: :development
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
|
-
- -
|
52
|
+
- - ">="
|
60
53
|
- !ruby/object:Gem::Version
|
61
54
|
version: '0'
|
62
55
|
- !ruby/object:Gem::Dependency
|
63
56
|
name: fuubar
|
64
57
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
58
|
requirements:
|
67
|
-
- -
|
59
|
+
- - ">="
|
68
60
|
- !ruby/object:Gem::Version
|
69
61
|
version: '0'
|
70
62
|
type: :development
|
71
63
|
prerelease: false
|
72
64
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
65
|
requirements:
|
75
|
-
- -
|
66
|
+
- - ">="
|
76
67
|
- !ruby/object:Gem::Version
|
77
68
|
version: '0'
|
78
69
|
- !ruby/object:Gem::Dependency
|
79
70
|
name: simplecov
|
80
71
|
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
72
|
requirements:
|
83
|
-
- -
|
73
|
+
- - ">="
|
84
74
|
- !ruby/object:Gem::Version
|
85
75
|
version: '0'
|
86
76
|
type: :development
|
87
77
|
prerelease: false
|
88
78
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
79
|
requirements:
|
91
|
-
- -
|
80
|
+
- - ">="
|
92
81
|
- !ruby/object:Gem::Version
|
93
82
|
version: '0'
|
94
83
|
- !ruby/object:Gem::Dependency
|
95
84
|
name: coveralls
|
96
85
|
requirement: !ruby/object:Gem::Requirement
|
97
|
-
none: false
|
98
86
|
requirements:
|
99
|
-
- -
|
87
|
+
- - ">="
|
100
88
|
- !ruby/object:Gem::Version
|
101
89
|
version: '0'
|
102
90
|
type: :development
|
103
91
|
prerelease: false
|
104
92
|
version_requirements: !ruby/object:Gem::Requirement
|
105
|
-
none: false
|
106
93
|
requirements:
|
107
|
-
- -
|
94
|
+
- - ">="
|
108
95
|
- !ruby/object:Gem::Version
|
109
96
|
version: '0'
|
110
97
|
description: Pure dynamic Watir-based page object DSL
|
@@ -113,8 +100,8 @@ executables: []
|
|
113
100
|
extensions: []
|
114
101
|
extra_rdoc_files: []
|
115
102
|
files:
|
116
|
-
- .coveralls.yml
|
117
|
-
- .travis.yml
|
103
|
+
- ".coveralls.yml"
|
104
|
+
- ".travis.yml"
|
118
105
|
- CHANGELOG.md
|
119
106
|
- Gemfile
|
120
107
|
- LICENSE.md
|
@@ -139,33 +126,26 @@ files:
|
|
139
126
|
- watirsome.gemspec
|
140
127
|
homepage: http://github.com/p0deje/watirsome
|
141
128
|
licenses: []
|
129
|
+
metadata: {}
|
142
130
|
post_install_message:
|
143
131
|
rdoc_options: []
|
144
132
|
require_paths:
|
145
133
|
- lib
|
146
134
|
required_ruby_version: !ruby/object:Gem::Requirement
|
147
|
-
none: false
|
148
135
|
requirements:
|
149
|
-
- -
|
136
|
+
- - ">="
|
150
137
|
- !ruby/object:Gem::Version
|
151
138
|
version: '0'
|
152
|
-
segments:
|
153
|
-
- 0
|
154
|
-
hash: 2091343636029663572
|
155
139
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
156
|
-
none: false
|
157
140
|
requirements:
|
158
|
-
- -
|
141
|
+
- - ">="
|
159
142
|
- !ruby/object:Gem::Version
|
160
143
|
version: '0'
|
161
|
-
segments:
|
162
|
-
- 0
|
163
|
-
hash: 2091343636029663572
|
164
144
|
requirements: []
|
165
145
|
rubyforge_project:
|
166
|
-
rubygems_version:
|
146
|
+
rubygems_version: 2.2.0
|
167
147
|
signing_key:
|
168
|
-
specification_version:
|
148
|
+
specification_version: 4
|
169
149
|
summary: Awesome page objects with Watir
|
170
150
|
test_files:
|
171
151
|
- spec/lib/watirsome/accessors_spec.rb
|