page-object 2.1.1 → 2.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.
Files changed (38) hide show
  1. checksums.yaml +4 -4
  2. data/.ruby-version +1 -1
  3. data/ChangeLog +14 -2
  4. data/Gemfile +0 -5
  5. data/lib/page-object.rb +6 -11
  6. data/lib/page-object/elements/button.rb +0 -11
  7. data/lib/page-object/elements/check_box.rb +0 -6
  8. data/lib/page-object/elements/div.rb +0 -7
  9. data/lib/page-object/elements/element.rb +13 -119
  10. data/lib/page-object/elements/file_field.rb +0 -6
  11. data/lib/page-object/elements/form.rb +0 -6
  12. data/lib/page-object/elements/hidden_field.rb +0 -6
  13. data/lib/page-object/elements/image.rb +0 -6
  14. data/lib/page-object/elements/label.rb +0 -6
  15. data/lib/page-object/elements/link.rb +0 -10
  16. data/lib/page-object/elements/list_item.rb +0 -6
  17. data/lib/page-object/elements/ordered_list.rb +2 -6
  18. data/lib/page-object/elements/radio_button.rb +0 -6
  19. data/lib/page-object/elements/select_list.rb +1 -5
  20. data/lib/page-object/elements/span.rb +0 -6
  21. data/lib/page-object/elements/table.rb +3 -3
  22. data/lib/page-object/elements/table_cell.rb +0 -6
  23. data/lib/page-object/elements/table_row.rb +3 -3
  24. data/lib/page-object/elements/text_area.rb +0 -6
  25. data/lib/page-object/elements/text_field.rb +0 -6
  26. data/lib/page-object/elements/unordered_list.rb +2 -6
  27. data/lib/page-object/indexed_properties.rb +2 -2
  28. data/lib/page-object/javascript_framework_facade.rb +1 -1
  29. data/lib/page-object/locator_generator.rb +152 -148
  30. data/lib/page-object/page_populator.rb +15 -0
  31. data/lib/page-object/platforms/watir.rb +3 -5
  32. data/lib/page-object/platforms/watir/page_object.rb +12 -20
  33. data/lib/page-object/version.rb +1 -1
  34. data/lib/page-object/widgets.rb +1 -13
  35. data/page-object.gemspec +6 -6
  36. metadata +27 -29
  37. data/lib/page-object/loads_platform.rb +0 -45
  38. data/lib/page-object/platforms.rb +0 -17
@@ -34,6 +34,7 @@ module PageObject
34
34
  populate_checkbox(key, value) if is_checkbox?(key) and is_enabled?(key)
35
35
  populate_radiobuttongroup(key, value) if is_radiobuttongroup?(key)
36
36
  populate_radiobutton(key, value) if is_radiobutton?(key) and is_enabled?(key)
37
+ populate_select_list(key, value) if is_select_list?(key)
37
38
  populate_text(key, value) if is_text?(key) and is_enabled?(key)
38
39
  end
39
40
  end
@@ -57,7 +58,17 @@ module PageObject
57
58
  return self.send("select_#{key}", value)
58
59
  end
59
60
 
61
+ def populate_select_list(key, value)
62
+ select_element = self.send("#{key}_element")
63
+ if select_element.options.include?(value)
64
+ select_element.select(value)
65
+ else
66
+ select_element.select_value(value)
67
+ end
68
+ end
69
+
60
70
  def is_text?(key)
71
+ return false if is_select_list?(key)
61
72
  respond_to?("#{key}=".to_sym)
62
73
  end
63
74
 
@@ -73,6 +84,10 @@ module PageObject
73
84
  respond_to?("select_#{key}".to_sym) and respond_to?("#{key}_values")
74
85
  end
75
86
 
87
+ def is_select_list?(key)
88
+ respond_to?("#{key}_options".to_sym)
89
+ end
90
+
76
91
  def is_enabled?(key)
77
92
  return false if is_radiobuttongroup?(key)
78
93
  return true if (self.send "#{key}_element").tag_name == "textarea"
@@ -1,10 +1,10 @@
1
1
  module PageObject
2
2
  module Platforms
3
- module WatirWebDriver
3
+ module Watir
4
4
 
5
5
  def self.create_page_object(browser)
6
6
  browser = selenium_browser(browser) unless watir?(browser)
7
- return WatirWebDriver::PageObject.new(browser)
7
+ return Watir::PageObject.new(browser)
8
8
  end
9
9
 
10
10
  def self.is_for?(browser)
@@ -19,7 +19,7 @@ module PageObject
19
19
  end
20
20
 
21
21
  def self.root_element_for root
22
- Elements::Element.new root, :platform => :watir if is_for? root
22
+ Elements::Element.new(root) if is_for?(root)
23
23
  end
24
24
 
25
25
  def self.browser_root_for browser
@@ -48,5 +48,3 @@ module PageObject
48
48
  end
49
49
  end
50
50
  end
51
-
52
- PageObject::Platforms.register(:watir, PageObject::Platforms::WatirWebDriver)
@@ -4,7 +4,7 @@ require 'page-object/core_ext/string'
4
4
 
5
5
  module PageObject
6
6
  module Platforms
7
- module WatirWebDriver
7
+ module Watir
8
8
 
9
9
  #
10
10
  # Watir implementation of the page object platform driver. You should not use the
@@ -14,8 +14,6 @@ module PageObject
14
14
  class PageObject
15
15
  attr_reader :browser
16
16
 
17
- PLATFORM_NAME = :watir
18
-
19
17
  def self.define_widget_accessors(widget_tag, widget_class, base_element_tag)
20
18
  define_widget_singular_accessor(base_element_tag, widget_class, widget_tag)
21
19
  define_widget_multiple_accessor(base_element_tag, widget_class, widget_tag)
@@ -139,8 +137,7 @@ module PageObject
139
137
  element = browser.execute_script("return document.activeElement")
140
138
  type = element.type.to_sym if element.tag_name.to_sym == :input
141
139
  cls = ::PageObject::Elements.element_class_for(element.tag_name, type)
142
- # cls.new(element, :platform => :watir)
143
- cls.new(element, :platform => self.class::PLATFORM_NAME)
140
+ cls.new(element)
144
141
  end
145
142
 
146
143
  #
@@ -295,8 +292,10 @@ module PageObject
295
292
  # See PageObject::Accessors#select_list
296
293
  #
297
294
  def select_list_value_for(identifier)
298
- process_watir_call("select_list(identifier).options.find {|o| o.selected?}.text",
295
+ options = find_watir_elements("select_list(identifier).selected_options",
299
296
  Elements::SelectList, identifier)
297
+ return nil if options.empty?
298
+ options.first.text
300
299
  end
301
300
 
302
301
  #
@@ -1039,14 +1038,14 @@ module PageObject
1039
1038
  identifier, frame_identifiers = parse_identifiers(identifier, type, tag_name)
1040
1039
  elements = @browser.instance_eval "#{nested_frames(frame_identifiers)}#{the_call}"
1041
1040
  switch_to_default_content(frame_identifiers)
1042
- elements.map { |element| type.new(element, :platform => self.class::PLATFORM_NAME) }
1041
+ elements.map { |element| type.new(element) }
1043
1042
  end
1044
1043
 
1045
1044
  def find_watir_element(the_call, type, identifier, tag_name=nil)
1046
1045
  identifier, frame_identifiers = parse_identifiers(identifier, type, tag_name)
1047
1046
  element = @browser.instance_eval "#{nested_frames(frame_identifiers)}#{the_call}"
1048
1047
  switch_to_default_content(frame_identifiers)
1049
- type.new(element, :platform => self.class::PLATFORM_NAME)
1048
+ type.new(element)
1050
1049
  end
1051
1050
 
1052
1051
  def find_watir_pages(identifier, page_class)
@@ -1071,18 +1070,11 @@ module PageObject
1071
1070
  end
1072
1071
 
1073
1072
  def parse_identifiers(identifier, element, tag_name=nil)
1074
- frame_identifiers = identifier.delete(:frame)
1075
- identifier = add_tagname_if_needed identifier, tag_name if tag_name
1076
- identifier = element.watir_identifier_for identifier
1077
- return identifier, frame_identifiers
1078
- end
1079
-
1080
- def add_tagname_if_needed identifier, tag
1081
- return identifier if identifier.length < 2 and not identifier[:name]
1082
- identifier[:tag_name] = tag if identifier[:name]
1083
- identifier
1073
+ new_identifiers = identifier.dup
1074
+ frame_identifiers = new_identifiers.delete(:frame)
1075
+ return new_identifiers, frame_identifiers
1084
1076
  end
1085
-
1077
+
1086
1078
  def nested_frames(frame_identifiers)
1087
1079
  return if frame_identifiers.nil?
1088
1080
  frame_str = ''
@@ -1103,7 +1095,7 @@ module PageObject
1103
1095
  end
1104
1096
 
1105
1097
  def switch_to_default_content(frame_identifiers)
1106
- @browser.wd.switch_to.default_content unless frame_identifiers.nil?
1098
+ @browser.browser.wd.switch_to.default_content unless frame_identifiers.nil?
1107
1099
  end
1108
1100
 
1109
1101
  def switch_to_frame(frame_identifiers)
@@ -1,4 +1,4 @@
1
1
  module PageObject
2
2
  # @private
3
- VERSION = "2.1.1"
3
+ VERSION = "2.2"
4
4
  end
@@ -20,24 +20,12 @@ module PageObject
20
20
  define_nested_elements(Elements::Element, widget_tag)
21
21
  define_locators(PageObject, widget_tag)
22
22
 
23
- PageObject::Platforms.constants.each { |platform|
24
- platform_class = constantize_classname("PageObject::Platforms::#{platform}::PageObject")
25
- if platform_class.respond_to?(:define_widget_accessors)
26
- platform_class.send(:define_widget_accessors,widget_tag, widget_class, base_element_tag)
27
- else
28
- $stderr.puts "*** WARNING"
29
- $stderr.puts "*** Platform PageObject::Platforms::#{platform} does not support widgets! Please add the 'define_widget_accessors' method in PageObject::Platforms::#{platform}::PageObject to support widgets."
30
- end
31
- }
23
+ PageObject::Platforms::Watir::PageObject.define_widget_accessors(widget_tag, widget_class, base_element_tag)
32
24
  end
33
25
  end
34
26
 
35
27
  private
36
28
 
37
- def self.constantize_classname name
38
- name.split("::").inject(Object) { |k,n| k.const_get(n) }
39
- end
40
-
41
29
  def self.define_accessors(base, widget_tag, widget_class)
42
30
  accessors_module = Module.new do
43
31
  define_method widget_tag do |name, *identifier_args, &block|
data/page-object.gemspec CHANGED
@@ -7,8 +7,8 @@ Gem::Specification.new do |s|
7
7
  s.name = "page-object"
8
8
  s.version = PageObject::VERSION
9
9
  s.platform = Gem::Platform::RUBY
10
- s.authors = ["Jeff Morgan", 'Dane Andersen']
11
- s.email = ["jeff.morgan@leandog.com", 'dane.andersen@gmail.com']
10
+ s.authors = ["Jeff Morgan", 'Alexis Andersen']
11
+ s.email = ["jeff.morgan@leandog.com", 'alexis.t.andersen@gmail.com']
12
12
  s.license = 'MIT'
13
13
  s.homepage = "http://github.com/cheezy/page-object"
14
14
  s.summary = %q{Page Object DSL for browser testing}
@@ -19,13 +19,13 @@ Gem::Specification.new do |s|
19
19
 
20
20
  s.add_dependency 'watir', '~> 6.0'
21
21
  s.add_dependency 'selenium-webdriver', '~> 3.0'
22
- s.add_dependency 'page_navigation', '>= 0.9'
23
- s.add_dependency 'net-http-persistent', '~> 3.0'
22
+ s.add_dependency 'page_navigation', '>= 0.10'
24
23
 
25
- s.add_development_dependency 'rspec', '>= 3.0.0'
26
- s.add_development_dependency 'cucumber', '>= 2.0.0'
24
+ s.add_development_dependency 'rspec', '~> 3.0'
25
+ s.add_development_dependency 'cucumber', '~> 2.0'
27
26
  s.add_development_dependency 'yard', '>= 0.7.2'
28
27
  s.add_development_dependency 'rack', '~> 1.0'
29
28
  s.add_development_dependency 'coveralls', '~> 0.8.1'
29
+ s.add_development_dependency 'net-http-persistent'
30
30
 
31
31
  end
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: page-object
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.1
4
+ version: '2.2'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jeff Morgan
8
- - Dane Andersen
8
+ - Alexis Andersen
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2017-03-07 00:00:00.000000000 Z
12
+ date: 2017-08-04 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: watir
@@ -45,56 +45,42 @@ dependencies:
45
45
  requirements:
46
46
  - - ">="
47
47
  - !ruby/object:Gem::Version
48
- version: '0.9'
48
+ version: '0.10'
49
49
  type: :runtime
50
50
  prerelease: false
51
51
  version_requirements: !ruby/object:Gem::Requirement
52
52
  requirements:
53
53
  - - ">="
54
54
  - !ruby/object:Gem::Version
55
- version: '0.9'
55
+ version: '0.10'
56
56
  - !ruby/object:Gem::Dependency
57
- name: net-http-persistent
57
+ name: rspec
58
58
  requirement: !ruby/object:Gem::Requirement
59
59
  requirements:
60
60
  - - "~>"
61
61
  - !ruby/object:Gem::Version
62
62
  version: '3.0'
63
- type: :runtime
63
+ type: :development
64
64
  prerelease: false
65
65
  version_requirements: !ruby/object:Gem::Requirement
66
66
  requirements:
67
67
  - - "~>"
68
68
  - !ruby/object:Gem::Version
69
69
  version: '3.0'
70
- - !ruby/object:Gem::Dependency
71
- name: rspec
72
- requirement: !ruby/object:Gem::Requirement
73
- requirements:
74
- - - ">="
75
- - !ruby/object:Gem::Version
76
- version: 3.0.0
77
- type: :development
78
- prerelease: false
79
- version_requirements: !ruby/object:Gem::Requirement
80
- requirements:
81
- - - ">="
82
- - !ruby/object:Gem::Version
83
- version: 3.0.0
84
70
  - !ruby/object:Gem::Dependency
85
71
  name: cucumber
86
72
  requirement: !ruby/object:Gem::Requirement
87
73
  requirements:
88
- - - ">="
74
+ - - "~>"
89
75
  - !ruby/object:Gem::Version
90
- version: 2.0.0
76
+ version: '2.0'
91
77
  type: :development
92
78
  prerelease: false
93
79
  version_requirements: !ruby/object:Gem::Requirement
94
80
  requirements:
95
- - - ">="
81
+ - - "~>"
96
82
  - !ruby/object:Gem::Version
97
- version: 2.0.0
83
+ version: '2.0'
98
84
  - !ruby/object:Gem::Dependency
99
85
  name: yard
100
86
  requirement: !ruby/object:Gem::Requirement
@@ -137,10 +123,24 @@ dependencies:
137
123
  - - "~>"
138
124
  - !ruby/object:Gem::Version
139
125
  version: 0.8.1
126
+ - !ruby/object:Gem::Dependency
127
+ name: net-http-persistent
128
+ requirement: !ruby/object:Gem::Requirement
129
+ requirements:
130
+ - - ">="
131
+ - !ruby/object:Gem::Version
132
+ version: '0'
133
+ type: :development
134
+ prerelease: false
135
+ version_requirements: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - ">="
138
+ - !ruby/object:Gem::Version
139
+ version: '0'
140
140
  description: Page Object DSL that works with both Watir and Selenium
141
141
  email:
142
142
  - jeff.morgan@leandog.com
143
- - dane.andersen@gmail.com
143
+ - alexis.t.andersen@gmail.com
144
144
  executables: []
145
145
  extensions: []
146
146
  extra_rdoc_files: []
@@ -200,12 +200,10 @@ files:
200
200
  - lib/page-object/javascript/prototype.rb
201
201
  - lib/page-object/javascript/yui.rb
202
202
  - lib/page-object/javascript_framework_facade.rb
203
- - lib/page-object/loads_platform.rb
204
203
  - lib/page-object/locator_generator.rb
205
204
  - lib/page-object/nested_elements.rb
206
205
  - lib/page-object/page_factory.rb
207
206
  - lib/page-object/page_populator.rb
208
- - lib/page-object/platforms.rb
209
207
  - lib/page-object/platforms/watir.rb
210
208
  - lib/page-object/platforms/watir/page_object.rb
211
209
  - lib/page-object/section_collection.rb
@@ -233,7 +231,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
233
231
  version: '0'
234
232
  requirements: []
235
233
  rubyforge_project:
236
- rubygems_version: 2.5.1
234
+ rubygems_version: 2.5.2
237
235
  signing_key:
238
236
  specification_version: 4
239
237
  summary: Page Object DSL for browser testing
@@ -1,45 +0,0 @@
1
- module PageObject
2
- #
3
- # module which provides a function for determining
4
- # which platform to provide to the page object
5
- #
6
- module LoadsPlatform
7
- #
8
- # Determines which platform the Page Object should use based upon browser
9
- #
10
- # @example
11
- # platform = load_platform(watir_browser, PageObject.Adapters.list).send(:new, watir_browser)
12
- #
13
- # @param [Object] A browser driver that has a supported adapter
14
- # @param [adapters] a list of adapters that are currently supported
15
- # @returns [PageObject]
16
- #
17
- def load_platform(browser, adapters)
18
- adapter_for(browser,adapters).create_page_object(browser)
19
- end
20
-
21
- def browser_for root,adapters
22
- adapter_for(root,adapters).browser_for(root)
23
- end
24
-
25
- def adapter_for element_or_browser, adapters
26
- adapter = adapters.values.find { |adapter|
27
- adapter.is_for?(element_or_browser)
28
- }
29
- unless adapter
30
- message = "Unable to pick a platform for the provided browser or element: #{element_or_browser.inspect}."
31
- message += "\nnil was passed to the PageObject constructor instead of a valid browser or element object." if element_or_browser.nil?
32
- raise message
33
- end
34
- adapter
35
- end
36
-
37
- def root_element_for root, adapters
38
- adapter_for(root,adapters).root_element_for(root)
39
- end
40
-
41
- def browser_root_for browser, adapters
42
- adapter_for(browser,adapters).browser_root_for(browser)
43
- end
44
- end
45
- end
@@ -1,17 +0,0 @@
1
- require 'page-object/loads_platform'
2
-
3
- module PageObject
4
- module Platforms
5
- @@adapters = {}
6
-
7
- def self.get
8
- @@adapters
9
- end
10
-
11
- def self.register(key, adapter)
12
- @@adapters[key] = adapter
13
- end
14
- end
15
- end
16
- require 'page-object/platforms/watir'
17
-