page-object 1.0.3 → 1.1.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.
Files changed (34) hide show
  1. checksums.yaml +4 -4
  2. data/ChangeLog +10 -0
  3. data/features/button.feature +13 -3
  4. data/features/html/indexed_property.html +3 -0
  5. data/features/html/static_elements.html +2 -0
  6. data/features/indexed_property.feature +20 -1
  7. data/features/section.feature +132 -0
  8. data/features/step_definitions/accessor_steps.rb +4 -0
  9. data/features/step_definitions/button_steps.rb +5 -0
  10. data/features/step_definitions/indexed_property_steps.rb +36 -2
  11. data/features/step_definitions/section_steps.rb +268 -0
  12. data/lib/page-object.rb +19 -7
  13. data/lib/page-object/accessors.rb +48 -0
  14. data/lib/page-object/elements/element.rb +4 -4
  15. data/lib/page-object/indexed_properties.rb +7 -3
  16. data/lib/page-object/loads_platform.rb +24 -5
  17. data/lib/page-object/platforms/selenium_webdriver.rb +14 -2
  18. data/lib/page-object/platforms/selenium_webdriver/button.rb +3 -3
  19. data/lib/page-object/platforms/selenium_webdriver/element.rb +1 -1
  20. data/lib/page-object/platforms/selenium_webdriver/page_object.rb +50 -0
  21. data/lib/page-object/platforms/watir_webdriver.rb +15 -3
  22. data/lib/page-object/platforms/watir_webdriver/element.rb +1 -1
  23. data/lib/page-object/platforms/watir_webdriver/page_object.rb +30 -0
  24. data/lib/page-object/sections.rb +29 -0
  25. data/lib/page-object/version.rb +1 -1
  26. data/page-object.gemspec +3 -3
  27. data/spec/page-object/elements/button_spec.rb +14 -0
  28. data/spec/page-object/elements/selenium_element_spec.rb +5 -0
  29. data/spec/page-object/elements/watir_element_spec.rb +4 -0
  30. data/spec/page-object/loads_platform_spec.rb +3 -3
  31. data/spec/page-object/page-object_spec.rb +1 -0
  32. data/spec/page-object/page_section_spec.rb +73 -0
  33. data/spec/spec_helper.rb +3 -1
  34. metadata +15 -6
data/page-object.gemspec CHANGED
@@ -6,8 +6,8 @@ Gem::Specification.new do |s|
6
6
  s.name = "page-object"
7
7
  s.version = PageObject::VERSION
8
8
  s.platform = Gem::Platform::RUBY
9
- s.authors = ["Jeff Morgan"]
10
- s.email = ["jeff.morgan@leandog.com"]
9
+ s.authors = ["Jeff Morgan", 'Dane Andersen']
10
+ s.email = ["jeff.morgan@leandog.com", 'dane.andersen@gmail.com']
11
11
  s.license = 'MIT'
12
12
  s.homepage = "http://github.com/cheezy/page-object"
13
13
  s.summary = %q{Page Object DSL for browser testing}
@@ -24,7 +24,7 @@ Gem::Specification.new do |s|
24
24
  s.add_dependency 'selenium-webdriver', '>= 2.44.0'
25
25
  s.add_dependency 'page_navigation', '>= 0.9'
26
26
 
27
- s.add_development_dependency 'rspec'
27
+ s.add_development_dependency 'rspec', '~> 3.1.0'
28
28
  s.add_development_dependency 'cucumber', '>= 1.3.0'
29
29
  s.add_development_dependency 'yard', '>= 0.7.2'
30
30
  s.add_development_dependency 'rack', '>= 1.0'
@@ -44,6 +44,20 @@ describe PageObject::Elements::Button do
44
44
  button = PageObject::Elements::Button.new(button_element, :platform => :selenium_webdriver)
45
45
  expect(lambda { button.text }).to raise_error
46
46
  end
47
+
48
+ it "should return text for a button tag button" do
49
+ allow(button_element).to receive(:tag_name).and_return('button')
50
+ allow(button_element).to receive(:text).and_return('button?')
51
+ button = PageObject::Elements::Button.new(button_element, :platform => :selenium_webdriver)
52
+ expect(button.text).to eq 'button?'
53
+ end
54
+
55
+ it "should return text for an input tag button" do
56
+ allow(button_element).to receive(:tag_name).and_return('input')
57
+ allow(button_element).to receive(:attribute).with('value').and_return('button!')
58
+ button = PageObject::Elements::Button.new(button_element, :platform => :selenium_webdriver)
59
+ expect(button.text).to eq 'button!'
60
+ end
47
61
  end
48
62
  end
49
63
 
@@ -1,3 +1,4 @@
1
+ require 'spec_helper'
1
2
  require 'page-object/elements'
2
3
  require 'selenium-webdriver'
3
4
 
@@ -46,6 +47,10 @@ describe "Element for Selenium" do
46
47
  expect(@selenium_element).to eq @selenium_element
47
48
  end
48
49
 
50
+ it "should know when it is not equal to another" do
51
+ expect(@selenium_element).not_to eq 'not an element'
52
+ end
53
+
49
54
  it "should return its tag name" do
50
55
  expect(@selenium_driver).to receive(:tag_name).and_return("h1")
51
56
  expect(@selenium_element.tag_name).to eql "h1"
@@ -42,6 +42,10 @@ describe "Element for Watir" do
42
42
  expect(watir_element).to eq watir_element
43
43
  end
44
44
 
45
+ it "should know when it is not equal to another" do
46
+ expect(watir_element).not_to eq 'not an element'
47
+ end
48
+
45
49
  it "should return its tag name" do
46
50
  expect(watir_driver).to receive(:tag_name).and_return("h1")
47
51
  expect(watir_element.tag_name).to eql "h1"
@@ -34,19 +34,19 @@ describe TestLoadsPlatform do
34
34
  end
35
35
 
36
36
  context "When an unknow object is passed in" do
37
- let(:basic_message) { 'Unable to pick a platform for the provided browser.' }
37
+ let(:basic_message) { 'Unable to pick a platform for the provided browser or element:' }
38
38
 
39
39
  it "should throw an exception" do
40
40
  expect {
41
41
  subject.load_platform("browser", {})
42
- }.to raise_error(basic_message)
42
+ }.to raise_error("#{basic_message} \"browser\".")
43
43
  end
44
44
 
45
45
  it "should notify when the browser is nil" do
46
46
  begin
47
47
  subject.load_platform(nil, {})
48
48
  rescue Exception => e
49
- expect(e.message).to eql "#{basic_message}\nnil was passed to the PageObject constructor instead of a valid browser object."
49
+ expect(e.message).to eql "#{basic_message} nil.\nnil was passed to the PageObject constructor instead of a valid browser or element object."
50
50
  end
51
51
  end
52
52
  end
@@ -169,6 +169,7 @@ describe PageObject do
169
169
 
170
170
  context "when using WatirPageObject" do
171
171
  it "should display the page text" do
172
+ expect(watir_browser).to receive(:element).and_return(watir_browser)
172
173
  expect(watir_browser).to receive(:text).and_return("browser text")
173
174
  expect(watir_page_object.text).to eql "browser text"
174
175
  end
@@ -0,0 +1,73 @@
1
+ require 'spec_helper'
2
+ require 'page-object/elements'
3
+
4
+ class Container
5
+ include PageObject
6
+ end
7
+ class SectionsPage
8
+ include PageObject
9
+
10
+ page_section(:container, Container, :id => 'blah')
11
+ page_sections(:containers, Container, :class => 'foo')
12
+ end
13
+
14
+ describe PageObject::Accessors do
15
+ context 'when using watir' do
16
+ let(:watir_browser) { mock_watir_browser }
17
+ let(:watir_page_object) { SectionsPage.new(watir_browser) }
18
+
19
+ it 'it should find a page section' do
20
+ expect(watir_browser).to receive(:element).with(:id => 'blah').and_return(watir_browser)
21
+ section = watir_page_object.container
22
+ expect(section).to be_instance_of Container
23
+ end
24
+ it 'it should find page sections' do
25
+ expect(watir_browser).to receive(:elements).with(:class => 'foo').and_return([watir_browser, watir_browser])
26
+ sections = watir_page_object.containers
27
+ expect(sections).to be_instance_of(PageObject::SectionCollection)
28
+ sections.each do |section|
29
+ expect(section).to be_instance_of(Container)
30
+ end
31
+ end
32
+ end
33
+ context 'when using selenium' do
34
+ let(:selenium_browser) { mock_selenium_browser }
35
+ let(:selenium_page_object) { SectionsPage.new(selenium_browser) }
36
+
37
+ it 'it should find a page section' do
38
+ expect(selenium_browser).to receive(:find_element).with(:id, 'blah').and_return(selenium_browser)
39
+ section = selenium_page_object.container
40
+ expect(section).to be_instance_of Container
41
+ end
42
+ it 'it should find page sections' do
43
+ expect(selenium_browser).to receive(:find_elements).with(:class, 'foo').and_return([selenium_browser, selenium_browser])
44
+ sections = selenium_page_object.containers
45
+ expect(sections).to be_instance_of(PageObject::SectionCollection)
46
+ sections.each do |section|
47
+ expect(section).to be_instance_of(Container)
48
+ end
49
+ end
50
+ end
51
+ end
52
+ describe PageObject::SectionCollection do
53
+ ContainedItem = Struct.new(:type, :name)
54
+ let(:section_collection) do
55
+ contained_items = [ContainedItem.new(:sandwich, :reuben), ContainedItem.new(:soup, :lobster_bisque), ContainedItem.new(:sandwich, :dagwood)]
56
+ PageObject::SectionCollection.new(contained_items)
57
+ end
58
+ it 'should be indexed to the sections' do
59
+ expect(section_collection[0]).to be_an_instance_of ContainedItem
60
+ expect(section_collection[-1]).to be_an_instance_of ContainedItem
61
+ end
62
+ it 'should be able to iterate over the sections' do
63
+ section_collection.each do |section|
64
+ expect(section).to be_an_instance_of ContainedItem
65
+ end
66
+ end
67
+ it 'should find a section by one of its values' do
68
+ expect(section_collection.find_by(name: :dagwood).name).to eq :dagwood
69
+ end
70
+ it 'should find all sections matching a value' do
71
+ expect(section_collection.select_by(type: :sandwich).map(&:type)).to eq [:sandwich, :sandwich]
72
+ end
73
+ end
data/spec/spec_helper.rb CHANGED
@@ -25,7 +25,7 @@ end
25
25
 
26
26
  def mock_selenium_browser
27
27
  selenium_browser = double('selenium')
28
- allow(selenium_browser).to receive(:is_a?).with(Watir::Browser).and_return(false)
28
+ allow(selenium_browser).to receive(:is_a?).with(anything).and_return(false)
29
29
  allow(selenium_browser).to receive(:is_a?).with(Selenium::WebDriver::Driver).and_return(true)
30
30
  selenium_browser
31
31
  end
@@ -36,6 +36,8 @@ def mock_adapter(browser, page_object)
36
36
  allow(adapter).to receive(:is_for?).with(anything()).and_return false
37
37
  allow(adapter).to receive(:is_for?).with(browser).and_return true
38
38
  allow(adapter).to receive(:create_page_object).and_return page_object
39
+ allow(adapter).to receive(:root_element_for).and_return browser
40
+ allow(adapter).to receive(:browser_for).and_return browser
39
41
  adapter
40
42
  end
41
43
 
metadata CHANGED
@@ -1,14 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: page-object
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.3
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jeff Morgan
8
+ - Dane Andersen
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2014-12-09 00:00:00.000000000 Z
12
+ date: 2015-05-02 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: watir-webdriver
@@ -56,16 +57,16 @@ dependencies:
56
57
  name: rspec
57
58
  requirement: !ruby/object:Gem::Requirement
58
59
  requirements:
59
- - - ">="
60
+ - - "~>"
60
61
  - !ruby/object:Gem::Version
61
- version: '0'
62
+ version: 3.1.0
62
63
  type: :development
63
64
  prerelease: false
64
65
  version_requirements: !ruby/object:Gem::Requirement
65
66
  requirements:
66
- - - ">="
67
+ - - "~>"
67
68
  - !ruby/object:Gem::Version
68
- version: '0'
69
+ version: 3.1.0
69
70
  - !ruby/object:Gem::Dependency
70
71
  name: cucumber
71
72
  requirement: !ruby/object:Gem::Requirement
@@ -111,6 +112,7 @@ dependencies:
111
112
  description: Page Object DSL that works with both Watir and Selenium
112
113
  email:
113
114
  - jeff.morgan@leandog.com
115
+ - dane.andersen@gmail.com
114
116
  executables: []
115
117
  extensions: []
116
118
  extra_rdoc_files: []
@@ -193,6 +195,7 @@ files:
193
195
  - features/sample-app/public/prototype-1.6.0.3.js
194
196
  - features/sample-app/public/prototype.html
195
197
  - features/sample-app/sample_app.rb
198
+ - features/section.feature
196
199
  - features/select_list.feature
197
200
  - features/span.feature
198
201
  - features/step_definitions/accessor_steps.rb
@@ -227,6 +230,7 @@ files:
227
230
  - features/step_definitions/paragraph_steps.rb
228
231
  - features/step_definitions/radio_button_group_steps.rb
229
232
  - features/step_definitions/radio_button_steps.rb
233
+ - features/step_definitions/section_steps.rb
230
234
  - features/step_definitions/select_list_steps.rb
231
235
  - features/step_definitions/span_steps.rb
232
236
  - features/step_definitions/table_cell_steps.rb
@@ -330,6 +334,7 @@ files:
330
334
  - lib/page-object/platforms/watir_webdriver/text_area.rb
331
335
  - lib/page-object/platforms/watir_webdriver/text_field.rb
332
336
  - lib/page-object/platforms/watir_webdriver/unordered_list.rb
337
+ - lib/page-object/sections.rb
333
338
  - lib/page-object/version.rb
334
339
  - lib/page-object/widgets.rb
335
340
  - page-object.gemspec
@@ -371,6 +376,7 @@ files:
371
376
  - spec/page-object/page-object_spec.rb
372
377
  - spec/page-object/page_factory_spec.rb
373
378
  - spec/page-object/page_populator_spec.rb
379
+ - spec/page-object/page_section_spec.rb
374
380
  - spec/page-object/platforms/selenium_webdriver/selenium_page_object_spec.rb
375
381
  - spec/page-object/platforms/selenium_webdriver_spec.rb
376
382
  - spec/page-object/platforms/watir_webdriver/watir_page_object_spec.rb
@@ -470,6 +476,7 @@ test_files:
470
476
  - features/sample-app/public/prototype-1.6.0.3.js
471
477
  - features/sample-app/public/prototype.html
472
478
  - features/sample-app/sample_app.rb
479
+ - features/section.feature
473
480
  - features/select_list.feature
474
481
  - features/span.feature
475
482
  - features/step_definitions/accessor_steps.rb
@@ -504,6 +511,7 @@ test_files:
504
511
  - features/step_definitions/paragraph_steps.rb
505
512
  - features/step_definitions/radio_button_group_steps.rb
506
513
  - features/step_definitions/radio_button_steps.rb
514
+ - features/step_definitions/section_steps.rb
507
515
  - features/step_definitions/select_list_steps.rb
508
516
  - features/step_definitions/span_steps.rb
509
517
  - features/step_definitions/table_cell_steps.rb
@@ -563,6 +571,7 @@ test_files:
563
571
  - spec/page-object/page-object_spec.rb
564
572
  - spec/page-object/page_factory_spec.rb
565
573
  - spec/page-object/page_populator_spec.rb
574
+ - spec/page-object/page_section_spec.rb
566
575
  - spec/page-object/platforms/selenium_webdriver/selenium_page_object_spec.rb
567
576
  - spec/page-object/platforms/selenium_webdriver_spec.rb
568
577
  - spec/page-object/platforms/watir_webdriver/watir_page_object_spec.rb