watir_drops 0.3.4 → 0.4.0

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: 06b995a8643b6747bff783e4f714b96df55ea9aa
4
- data.tar.gz: a7a3fc82cf579b01466b14711ff2fdbeb5bd41f2
3
+ metadata.gz: d66c2965a5fd282b640c17434bdbf4b428560a77
4
+ data.tar.gz: e82eb9a8b5c37bb0508de2c02b0e706e74b66816
5
5
  SHA512:
6
- metadata.gz: 0ef1710bcab707a70f3df2f96fa7fe34ac3884d77007d0c5a7a3f9909fd1e8e09ef2cbcf41647c9644434bab6fcab7287a85958c3728fd9ed1018e0b7ba772ad
7
- data.tar.gz: bbf53a96376ee1cd2fbbc9baa1a9d57da792ebf1ad4eba3f8cb7ababd95ffb348067feaf220419f0f54393e712881d468b281176a2b836df88f2fa4d55021213
6
+ metadata.gz: 0a5423e07816e4b930deb21c8cc0a2db17e4bbcdb511efd79c61086ff8f50dc4214053bd2b30e6f0bc717faf341791aca89961d7c378e595829758c6863d0bcf
7
+ data.tar.gz: fdee13b41ebdd7e1f694f260b706a89a272c6eff74f49cf8a41f61d97b86699efcdf887e310037e7b8a0da28e6828e977d40ad501f5729a033fa7e19f79711d4
data/CHANGES.md ADDED
@@ -0,0 +1,41 @@
1
+ ### 0.4.0 (2016-02-12)
2
+
3
+ * define elements & collections with locator hashes as well as blocks
4
+ * supports auto-form filling data from any object that converts to a hash
5
+ * allow setting browser with class method
6
+ * runtime dependency removed for watir_model and watir_session
7
+
8
+ ### 0.3.4 (2016-01-25)
9
+
10
+ * elements inherited in subclasses
11
+
12
+ ### 0.3.3 (2016-01-30)
13
+
14
+ * switch from test-model to watir_model
15
+ * update to latest watir_session implementation
16
+
17
+ ### 0.3.2 (2016-01-25)
18
+
19
+ * clear field before typing into it
20
+
21
+ ### 0.3.1 (2016-01-25)
22
+
23
+ * wait for element before interacting with it
24
+
25
+ ### 0.3.0 (2016-01-24)
26
+
27
+ * Singleton replaced with usage of watir_session gem
28
+ * page_url methods can take parameters
29
+ * Default form filling method with usage of test-model gem
30
+ * Pluralizing element names obtains collections of those elements
31
+ * `#visit` and `#use` methods provided for passing blocks to the Page Object
32
+
33
+ ### 0.1.1 (2015-07-30)
34
+
35
+ * Browser session stored in singleton
36
+ * Page Objects initialize without parameters
37
+ * Default actions for setters on elements
38
+
39
+ ### 0.1.0 (2015-07-15)
40
+
41
+ * initial commit
@@ -1,4 +1,4 @@
1
- require 'watir_session'
1
+ require 'watir-webdriver'
2
2
  require 'active_support/inflector'
3
3
 
4
4
  module WatirDrops
@@ -6,7 +6,7 @@ module WatirDrops
6
6
 
7
7
  class << self
8
8
 
9
- attr_writer :elements
9
+ attr_writer :element_list
10
10
 
11
11
  def page_url
12
12
  define_method("goto") do |*args|
@@ -14,48 +14,68 @@ module WatirDrops
14
14
  end
15
15
  end
16
16
 
17
- def elements
18
- @elements ||= []
17
+ def element_list
18
+ @element_list ||= []
19
19
  end
20
20
 
21
21
  def inherited(subclass)
22
- subclass.elements = elements.dup
22
+ subclass.element_list = element_list.dup
23
23
  end
24
24
 
25
- def element(name, &block)
26
- define_method(name) do |*args|
27
- self.instance_exec(*args, &block)
28
- end
25
+ Watir::Container.instance_methods(false).each do |class_method_name|
26
+ define_method(class_method_name) do |instance_method_name, locator = {}, &block|
27
+ define_method(instance_method_name) do |*args|
28
+ if block.is_a? Proc
29
+ raise StandardError, 'Can not define element with both locator and block' unless locator.empty?
30
+ expected_class = browser.send(class_method_name).class
31
+ element = self.instance_exec(*args, &block)
32
+ return element if element.is_a? expected_class
33
+ raise StandardError, "#{instance_method_name} method was defined as a #{expected_class}, but is a #{element.class}"
34
+ else
35
+ browser.send(class_method_name, locator)
36
+ end
37
+ end
29
38
 
30
- define_method(name.to_s.pluralize) do |*args|
31
- selector = self.instance_exec(*args, &block).instance_variable_get('@selector')
32
- element_type = selector.delete(:tag_name) || 'element'
33
- browser.send(element_type.pluralize, selector)
34
- end
39
+ define_method("#{instance_method_name}=") do |val|
40
+ watir_element = self.send(instance_method_name)
41
+ watir_element.wait_until_present
42
+ case watir_element
43
+ when Watir::Radio
44
+ watir_element.set if val
45
+ when Watir::CheckBox
46
+ val ? watir_element.set : watir_element.clear
47
+ when Watir::Select
48
+ watir_element.select val
49
+ when Watir::Button
50
+ watir_element.click
51
+ # TODO - Email & Password types are not set to UserEditable in Watir
52
+ when Watir::Input
53
+ watir_element.wd.clear
54
+ watir_element.send_keys val
55
+ else
56
+ watir_element.click if val
57
+ end
58
+ end
59
+
60
+ define_method(instance_method_name.to_s.pluralize) do |*args|
61
+ if block.is_a? Proc
62
+ expected_class = browser.send(class_method_name.to_s.pluralize).class
35
63
 
64
+ single_element = self.instance_exec(*args, &block)
65
+ parent = single_element.instance_variable_get('@parent')
66
+ selector = single_element.instance_variable_get('@selector')
67
+ element_type = selector.delete(:tag_name) || 'element'
68
+ element = parent.send(element_type.pluralize, selector)
36
69
 
37
- define_method("#{name}=") do |val|
38
- watir_element = self.instance_exec &block
39
- watir_element.wait_until_present
40
- case watir_element
41
- when Watir::Radio
42
- watir_element.set if val
43
- when Watir::CheckBox
44
- val ? watir_element.set : watir_element.clear
45
- when Watir::Select
46
- watir_element.select val
47
- when Watir::Button
48
- watir_element.click
49
- # TODO - Email & Password types are not set to UserEditable in Watir
50
- when Watir::Input
51
- watir_element.wd.clear
52
- watir_element.send_keys val
70
+ return element if element.is_a?(expected_class) || class_method_name == :element
71
+ raise StandardError, "#{instance_method_name} method was defined as a #{expected_class}, but is a #{element.class}"
53
72
  else
54
- watir_element.click if val
73
+ browser.send(class_method_name.to_s.pluralize, locator)
74
+ end
55
75
  end
56
- end
57
76
 
58
- elements << {name.to_sym => block}
77
+ element_list << instance_method_name.to_sym
78
+ end
59
79
  end
60
80
 
61
81
  def visit(*args)
@@ -69,18 +89,25 @@ module WatirDrops
69
89
  new.tap { yield if block_given? }
70
90
  end
71
91
 
72
- end
92
+ def browser=(*args)
93
+ @@browser = block_given? ? yield(args) : args.first
94
+ end
73
95
 
74
- attr_reader :browser
96
+ def browser
97
+ @@browser || (WatirSession.browser if defined? WatirSession)
98
+ end
99
+
100
+ end
75
101
 
76
- def initialize
77
- @browser = WatirSession.browser
102
+ def browser
103
+ self.class.browser
78
104
  end
79
105
 
80
106
  def fill_form(model)
81
- intersect = self.class.elements.map(&:keys).flatten & model.keys
107
+ model = model.to_h unless model.is_a? Hash
108
+ intersect = self.class.element_list & model.keys
82
109
  intersect.each do |val|
83
- self.send("#{val}=", model.send(val))
110
+ self.send("#{val}=", model[val])
84
111
  end
85
112
  end
86
113
 
data/watir_drops.gemspec CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |spec|
4
4
  spec.name = 'watir_drops'
5
- spec.version = '0.3.4'
5
+ spec.version = '0.4.0'
6
6
  spec.authors = ['Titus Fortner']
7
7
  spec.email = ['titusfortner@gmail.com']
8
8
 
@@ -15,10 +15,11 @@ application information, allowing it to be decoupled from the tests}
15
15
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
16
16
  spec.require_paths = ['lib']
17
17
 
18
- spec.add_runtime_dependency 'watir_session', '~> 0.2'
19
18
  spec.add_runtime_dependency 'activesupport', '~> 3.0'
20
19
 
21
20
  spec.add_development_dependency 'bundler', '~> 1.10'
22
21
  spec.add_development_dependency 'rake', '~> 10.0'
23
22
  spec.add_development_dependency 'rspec'
23
+ spec.add_development_dependency 'factory_girl'
24
+ spec.add_development_dependency 'watir_session', '~> 0.2'
24
25
  end
metadata CHANGED
@@ -1,29 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: watir_drops
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.4
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Titus Fortner
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-01-31 00:00:00.000000000 Z
11
+ date: 2016-02-13 00:00:00.000000000 Z
12
12
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: watir_session
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: '0.2'
20
- type: :runtime
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - "~>"
25
- - !ruby/object:Gem::Version
26
- version: '0.2'
27
13
  - !ruby/object:Gem::Dependency
28
14
  name: activesupport
29
15
  requirement: !ruby/object:Gem::Requirement
@@ -80,6 +66,34 @@ dependencies:
80
66
  - - ">="
81
67
  - !ruby/object:Gem::Version
82
68
  version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: factory_girl
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: watir_session
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '0.2'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '0.2'
83
97
  description: |-
84
98
  This gem leverages the Watir test framework to allow for easy modeling of specific web
85
99
  application information, allowing it to be decoupled from the tests
@@ -90,6 +104,7 @@ extensions: []
90
104
  extra_rdoc_files: []
91
105
  files:
92
106
  - ".gitignore"
107
+ - CHANGES.md
93
108
  - Gemfile
94
109
  - LICENSE.txt
95
110
  - README.md