watirsome 0.1.6 → 0.1.7

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 55acaa1b98823ce111123d39f9bbe1fc790858a4
4
- data.tar.gz: 54a6024bb51080cc4b210a56b950644c22138063
3
+ metadata.gz: fe636cb3b0cae995c534f29c111f641c893c231b
4
+ data.tar.gz: 7de7589b70e4a487f50fed9e1a6928c308faa896
5
5
  SHA512:
6
- metadata.gz: edd340975762139ecf58896937901031ff12f0a8557f844adce8a449f2f2975ccc28decf2305c077c10875f86f19138d13876d60beae54c837810f3ecd4f7ea3
7
- data.tar.gz: fb8c2f41ff5e263d9571a5c1d8596b38a90d4817f07873a5d0271443b5e689bf19090f963ad6a1da364bb22da136ea031cef5d20d87c8e47af03abd9cd957ff6
6
+ metadata.gz: 6dc9bab5a99c4db9460d4c3e34fa084adf1f4c3db3b56776be0d0e5c5b5492430f7df0a2c754cafbb63443fe15698647dc15764f8612b052154c627f8284293e
7
+ data.tar.gz: 0f853e10baafc6ef04c69c2210a5ccad5d4c4f4bfc225a333134a0ce11dd85be36371b5ab8216228b64c43d362c4681efbf3969b815f4d8bcf23a3fbc5ac341f
data/.rubocop.yml ADDED
@@ -0,0 +1,19 @@
1
+ Metrics/AbcSize:
2
+ Max: 17
3
+
4
+ Metrics/LineLength:
5
+ Max: 100
6
+
7
+ Metrics/MethodLength:
8
+ Max: 20
9
+
10
+ Metrics/ModuleLength:
11
+ Max: 110
12
+
13
+ Style/Documentation:
14
+ Enabled: false
15
+
16
+ Style/PercentLiteralDelimiters:
17
+ PreferredDelimiters:
18
+ '%i': '[]'
19
+ '%w': '[]'
data/.travis.yml CHANGED
@@ -1,4 +1,7 @@
1
- langauge: ruby
1
+ sudo: false
2
+ language: ruby
2
3
  rvm:
3
- - 1.9.3
4
- - 2.0.0
4
+ - 2.3.0
5
+ before_script:
6
+ - mkdir ~/.yard
7
+ - bundle exec yard config load_plugins true
data/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
+ ### v0.1.7
2
+
3
+ * Massive refactoring
4
+ * Added support for read accessors on checkbox/radio element (#4)
5
+
1
6
  #### v0.1.4
2
7
 
3
8
  * Support element subtype boolean locators (e.g. `select_list :list, selected: 'Default'`)
data/LICENSE.md CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2013 Alex Rodionov
1
+ Copyright (c) 2016 Alex Rodionov
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- ## watirsome [![Gem Version](https://badge.fury.io/rb/watirsome.png)](http://badge.fury.io/rb/watirsome) [![Build Status](https://secure.travis-ci.org/p0deje/watirsome.png)](http://travis-ci.org/p0deje/watirsome) [![Coverage Status](https://coveralls.io/repos/p0deje/watirsome/badge.png?branch=master)](https://coveralls.io/r/p0deje/watirsome)
1
+ ## watirsome [![Gem Version](https://badge.fury.io/rb/watirsome.svg)](http://badge.fury.io/rb/watirsome) [![Build Status](https://secure.travis-ci.org/p0deje/watirsome.svg)](http://travis-ci.org/p0deje/watirsome) [![Coverage Status](https://coveralls.io/repos/p0deje/watirsome/badge.svg?branch=master)](https://coveralls.io/r/p0deje/watirsome)
2
2
 
3
3
  Pure dynamic Watir-based page object DSL.
4
4
 
@@ -73,7 +73,7 @@ class Page
73
73
  end
74
74
 
75
75
  page = Page.new(@browser)
76
- page.body_element # equals to @browser.body
76
+ page.body_body # equals to @browser.body
77
77
  page.one_section # equals to @browser.section(id: 'section_one')
78
78
  page.svg_element # equals to @browser.element(tag_name: 'svg')
79
79
  page.login_button # equals to @browser.button(class: 'submit', index: 1)
@@ -323,4 +323,4 @@ Regions are being cached, so, once initialized, they won't be executed if you ca
323
323
 
324
324
  ### Copyright
325
325
 
326
- Copyright (c) 2013 Alex Rodionov. See LICENSE.md for details.
326
+ Copyright (c) 2016 Alex Rodionov. See LICENSE.md for details.
data/Rakefile CHANGED
@@ -3,10 +3,12 @@ $LOAD_PATH.unshift File.expand_path('../lib', __FILE__)
3
3
  require 'bundler'
4
4
  Bundler::GemHelper.install_tasks
5
5
 
6
- require 'rspec/core/rake_task'
7
- RSpec::Core::RakeTask.new do |spec|
8
- spec.rspec_opts = %w(--color --require fuubar --format Fuubar)
9
- spec.pattern = 'spec/**/*_spec.rb'
6
+ require 'yard-doctest'
7
+ YARD::Doctest::RakeTask.new do |task|
8
+ task.doctest_opts = %w[-v]
10
9
  end
11
10
 
12
- task default: :spec
11
+ require 'rubocop/rake_task'
12
+ RuboCop::RakeTask.new
13
+
14
+ task default: %w[rubocop yard:doctest]
data/doctest_helper.rb ADDED
@@ -0,0 +1,16 @@
1
+ require 'watirsome'
2
+
3
+ def browser
4
+ @browser ||= begin
5
+ browser = Watir::Browser.new(:phantomjs)
6
+ browser.goto "data:text/html,#{File.read('support/doctest.html')}"
7
+
8
+ browser
9
+ end
10
+ end
11
+
12
+ YARD::Doctest.configure do |doctest|
13
+ doctest.after do
14
+ @browser.quit if @browser
15
+ end
16
+ end
data/lib/watirsome.rb CHANGED
@@ -1,24 +1,68 @@
1
+ #
2
+ # General module which holds all appropriate Watirsome API.
3
+ # Includers can use accessors and initializers API.
4
+ #
5
+ # @example Element Accessors
6
+ # class Page
7
+ # include Watirsome
8
+ #
9
+ # element :body, tag_name: 'body'
10
+ # div :container, class: 'container'
11
+ # end
12
+ #
13
+ # page = Page.new(browser)
14
+ # page.body_element #=> browser.element(tag_name: 'body')
15
+ # page.container_div #=> browser.div(class: 'container')
16
+ #
17
+ # @example Read Accessors
18
+ # class Page
19
+ # include Watirsome
20
+ #
21
+ # div :container, class: 'container'
22
+ # radio :sex_male, value: "Male"
23
+ # end
24
+ #
25
+ # page = Page.new(browser)
26
+ # page.container #=> "Container"
27
+ # page.sex_male_radio.set
28
+ # page.sex_male #=> true
29
+ #
30
+ # @example Click Accessors
31
+ # class Page
32
+ # include Watirsome
33
+ #
34
+ # a :open_google, text: 'Open Google'
35
+ # end
36
+ #
37
+ # page = Page.new(browser)
38
+ # page.open_google
39
+ # browser.title #=> "Google"
40
+ #
41
+ # @example Set Accessors
42
+ # class Page
43
+ # include Watirsome
44
+ #
45
+ # text_field :name, placeholder: "Enter your name"
46
+ # select_list :country, name: "Country"
47
+ # checkbox :agree, name: "I Agree"
48
+ # end
49
+ #
50
+ # page = Page.new(browser)
51
+ # page.name = 'My name'
52
+ # page.name #=> "My name"
53
+ # page.country = "Russia"
54
+ # page.country #=> "Russia"
55
+ # page.agree = true
56
+ # page.agree #=> true
57
+ #
1
58
  module Watirsome
2
59
  class << self
3
-
4
- # @attr [Array<Symbol>] readable
5
- attr_accessor :readable
6
-
7
- # @attr [Array<Symbol>] clickable
8
- attr_accessor :clickable
9
-
10
- # @attr [Array<Symbol>] settable
11
- attr_accessor :settable
12
-
13
- # @attr [Array<Symbol>] selectable
14
- attr_accessor :selectable
15
-
16
60
  #
17
61
  # Returns array of readable elements.
18
62
  # @return [Array<Symbol>]
19
63
  #
20
64
  def readable
21
- @readable ||= [:div, :span, :p, :h1, :h2, :h3, :h4, :h5, :h6, :select_list, :text_field, :textarea]
65
+ @readable ||= %i[div span p h1 h2 h3 h4 h5 h6 select_list text_field textarea checkbox radio]
22
66
  end
23
67
 
24
68
  #
@@ -26,7 +70,7 @@ module Watirsome
26
70
  # @return [Array<Symbol>]
27
71
  #
28
72
  def clickable
29
- @clickable ||= [:a, :link, :button]
73
+ @clickable ||= %i[a link button]
30
74
  end
31
75
 
32
76
  #
@@ -34,21 +78,17 @@ module Watirsome
34
78
  # @return [Array<Symbol>]
35
79
  #
36
80
  def settable
37
- @settable ||= [:text_field, :file_field, :textarea, :checkbox]
38
- end
39
-
40
- #
41
- # Returns array of selectable elements.
42
- # @return [Array<Symbol>]
43
- #
44
- def selectable
45
- @selectable ||= [:select_list]
81
+ @settable ||= %i[text_field file_field textarea checkbox select_list]
46
82
  end
47
83
 
48
84
  #
49
85
  # Returns true if tag can have click accessor.
50
86
  #
51
- # @param [Symbol, String] method
87
+ # @example
88
+ # Watirsome.clickable?(:button) #=> true
89
+ # Watirsome.clickable?(:div) #=> false
90
+ #
91
+ # @param [Symbol, String] tag
52
92
  # @return [Boolean]
53
93
  #
54
94
  def clickable?(tag)
@@ -58,27 +98,25 @@ module Watirsome
58
98
  #
59
99
  # Returns true if tag can have set accessor.
60
100
  #
61
- # @param [Symbol, String] method
101
+ # @example
102
+ # Watirsome.settable?(:text_field) #=> true
103
+ # Watirsome.settable?(:button) #=> false
104
+ #
105
+ # @param [Symbol, String] tag
62
106
  # @return [Boolean]
63
107
  #
64
108
  def settable?(tag)
65
109
  settable.include? tag.to_sym
66
110
  end
67
111
 
68
- #
69
- # Returns true if tag can have select accessor.
70
- #
71
- # @param [Symbol, String] method
72
- # @return [Boolean]
73
- #
74
- def selectable?(tag)
75
- selectable.include? tag.to_sym
76
- end
77
-
78
112
  #
79
113
  # Returns true if tag can have text accessor.
80
114
  #
81
- # @param [Symbol, String] method
115
+ # @example
116
+ # Watirsome.readable?(:div) #=> true
117
+ # Watirsome.readable?(:body) #=> false
118
+ #
119
+ # @param [Symbol, String] tag
82
120
  # @return [Boolean]
83
121
  #
84
122
  def readable?(tag)
@@ -101,6 +139,10 @@ module Watirsome
101
139
  #
102
140
  # Return true if method can be proxied to Watir, false otherwise.
103
141
  #
142
+ # @example
143
+ # Watirsome.watirsome?(:div) #=> true
144
+ # Watirsome.watirsome?(:to_a) #=> false
145
+ #
104
146
  # @param [Symbol] method
105
147
  # @return [Boolean]
106
148
  #
@@ -112,8 +154,8 @@ module Watirsome
112
154
  # Returns true if method is element accessor in plural form.
113
155
  #
114
156
  # @example
115
- # Watirsome.plural? :div #=> false
116
- # Watirsome.plural? :divs #=> true
157
+ # Watirsome.plural?(:divs) #=> true
158
+ # Watirsome.plural?(:div) #=> false
117
159
  #
118
160
  # @param [Symbol, String] method
119
161
  # @return [Boolean]
@@ -124,15 +166,17 @@ module Watirsome
124
166
  plr = str.to_sym
125
167
  sgl = str.sub(/e?s$/, '').to_sym
126
168
 
127
- /s$/ === str && Watirsome.watir_methods.include?(plr) && Watirsome.watir_methods.include?(sgl)
169
+ !str.match(/s$/).nil? &&
170
+ Watirsome.watir_methods.include?(plr) &&
171
+ Watirsome.watir_methods.include?(sgl)
128
172
  end
129
173
 
130
174
  #
131
175
  # Pluralizes element.
132
176
  #
133
177
  # @example
134
- # Watirsome.pluralize :div #=> :divs
135
- # Watirsome.pluralize :checkbox #=> :checkboxes
178
+ # Watirsome.pluralize(:div) #=> :divs
179
+ # Watirsome.pluralize(:checkbox) #=> :checkboxes
136
180
  #
137
181
  # @param [Symbol, String] method
138
182
  # @return [Symbol]
@@ -151,19 +195,15 @@ module Watirsome
151
195
  raise Errors::CannotPluralizeError, "Can't find plural form for #{str}!"
152
196
  end
153
197
  end
154
-
155
198
  end # self
156
199
 
157
-
158
200
  def self.included(kls)
159
- kls.extend Watirsome::Accessors::ClassMethods
160
- kls.send :include, Watirsome::Accessors::InstanceMethods
161
- kls.send :include, Watirsome::Initializers
201
+ kls.extend Watirsome::Accessors::ClassMethods
202
+ kls.__send__ :include, Watirsome::Accessors::InstanceMethods
203
+ kls.__send__ :include, Watirsome::Initializers
162
204
  end
163
-
164
205
  end # Watirsome
165
206
 
166
-
167
207
  require 'watir-webdriver'
168
208
  require 'watirsome/accessors'
169
209
  require 'watirsome/initializers'
@@ -1,9 +1,8 @@
1
1
  module Watirsome
2
2
  module Accessors
3
3
  module ClassMethods
4
-
5
4
  #
6
- # Iterate thorugh Watir continer methods and define all necessary
5
+ # Iterate through Watir continer methods and define all necessary
7
6
  # class methods of element accessors.
8
7
  #
9
8
  Watirsome.watir_methods.each do |method|
@@ -11,10 +10,9 @@ module Watirsome
11
10
  name, args = parse_args(args)
12
11
  block = proc_from_args(args, &blk)
13
12
  define_element_accessor(name, method, args, &block)
14
- define_click_accessor(name, method, args, &block) if Watirsome.clickable?(method)
15
- define_read_accessor(name, method, args, &block) if Watirsome.readable?(method)
16
- define_set_accessor(name, method, args, &block) if Watirsome.settable?(method)
17
- define_select_accessor(name, method, args, &block) if Watirsome.selectable?(method)
13
+ define_click_accessor(name, method, args, &block) if Watirsome.clickable?(method)
14
+ define_read_accessor(name, method, args, &block) if Watirsome.readable?(method)
15
+ define_set_accessor(name, method, args, &block) if Watirsome.settable?(method)
18
16
  end
19
17
  end
20
18
 
@@ -25,11 +23,11 @@ module Watirsome
25
23
  # @api private
26
24
  #
27
25
  def parse_args(args)
28
- return args.shift, args.shift
26
+ [args.shift, args.shift]
29
27
  end
30
28
 
31
29
  #
32
- # Returns block retreived from locators.
30
+ # Returns block retrieved from locators.
33
31
  # @api private
34
32
  #
35
33
  def proc_from_args(*args, &blk)
@@ -53,7 +51,7 @@ module Watirsome
53
51
  #
54
52
  def define_element_accessor(name, method, *args, &block)
55
53
  watir_args, custom_args = extract_custom_args(method, args)
56
- define_method :"#{name}_#{method}" do |*opts|
54
+ define_method "#{name}_#{method}" do |*opts|
57
55
  if block_given?
58
56
  instance_exec(*opts, &block)
59
57
  else
@@ -110,6 +108,8 @@ module Watirsome
110
108
  element.value
111
109
  when :select_list
112
110
  element.options.detect(&:selected?).text
111
+ when :checkbox, :radio
112
+ element.set?
113
113
  else
114
114
  element.text
115
115
  end
@@ -130,13 +130,15 @@ module Watirsome
130
130
  #
131
131
  def define_set_accessor(name, method, *args, &block)
132
132
  watir_args, custom_args = extract_custom_args(method, args)
133
- define_method :"#{name}=" do |*opts|
133
+ define_method "#{name}=" do |*opts|
134
134
  element = if block_given?
135
135
  instance_exec(&block)
136
136
  else
137
137
  grab_elements(method, watir_args, custom_args)
138
138
  end
139
- if element.respond_to?(:set)
139
+ if element.is_a?(Watir::Select)
140
+ element.select(*opts)
141
+ elsif element.respond_to?(:set)
140
142
  element.set(*opts)
141
143
  else
142
144
  element.send_keys(*opts)
@@ -144,29 +146,6 @@ module Watirsome
144
146
  end
145
147
  end
146
148
 
147
- #
148
- # Defines accessor which selects option Watir element instance.
149
- # Method name is element name + "=".
150
- #
151
- # Note that custom block arguments are not used here.
152
- #
153
- # @param [Symbol] name Element name
154
- # @param [Symbol] method Watir method
155
- # @param [Array] args Splat of locators
156
- # @param [Proc] block Block as element retriever
157
- # @api private
158
- #
159
- def define_select_accessor(name, method, *args, &block)
160
- watir_args, custom_args = extract_custom_args(method, args)
161
- define_method :"#{name}=" do |*opts|
162
- if block_given?
163
- instance_exec(&block).select(*opts)
164
- else
165
- grab_elements(method, watir_args, custom_args).select(*opts)
166
- end
167
- end
168
- end
169
-
170
149
  #
171
150
  # Extracts custom arguments which Watirsome gracefully handles from
172
151
  # mixed array with Watir locators.
@@ -178,9 +157,11 @@ module Watirsome
178
157
  #
179
158
  def extract_custom_args(method, *args)
180
159
  identifier = args.shift
181
- watir_args, custom_args = [], []
160
+ watir_args = []
161
+ custom_args = []
182
162
  identifier.each_with_index do |hashes, index|
183
- watir_arg, custom_arg = {}, {}
163
+ watir_arg = {}
164
+ custom_arg = {}
184
165
  if hashes && !hashes.is_a?(Proc)
185
166
  hashes.each do |k, v|
186
167
  if Watir.element_class_for(method).instance_methods.include? :"#{k}?"
@@ -194,14 +175,11 @@ module Watirsome
194
175
  custom_args << custom_arg unless custom_arg.empty?
195
176
  end
196
177
 
197
- return watir_args, custom_args
178
+ [watir_args, custom_args]
198
179
  end
199
-
200
180
  end # ClassMethods
201
181
 
202
-
203
182
  module InstanceMethods
204
-
205
183
  private
206
184
 
207
185
  #
@@ -214,24 +192,23 @@ module Watirsome
214
192
  #
215
193
  def grab_elements(method, watir_args, custom_args)
216
194
  if custom_args.empty?
217
- @browser.send(method, *watir_args)
195
+ @browser.__send__(method, *watir_args)
218
196
  else
219
197
  plural = Watirsome.plural?(method)
220
198
  method = Watirsome.pluralize(method) unless plural
221
- elements = @browser.send(method, *watir_args)
199
+ elements = @browser.__send__(method, *watir_args)
222
200
  custom_args.first.each do |k, v|
223
201
  elements.to_a.select! do |e|
224
202
  if e.public_method(:"#{k}?").arity == 0
225
- e.send(:"#{k}?") == v
203
+ e.__send__(:"#{k}?") == v
226
204
  else
227
- e.send(:"#{k}?", v)
205
+ e.__send__(:"#{k}?", v)
228
206
  end
229
207
  end
230
208
  end
231
209
  plural ? elements : elements.first
232
210
  end
233
211
  end
234
-
235
212
  end # InstanceMethods
236
213
  end # Accessors
237
214
  end # Watirsome