capypage 0.1.1 → 0.2.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: e17d0dec80b73008960e7db25880188e4d49ac34
4
- data.tar.gz: 47d86693674305ec5141d0dbad476a4dda04d0a7
3
+ metadata.gz: 30a731012359de239cdb2f372f74ec752a45f69d
4
+ data.tar.gz: f76f9ceb5a7944cc056ba70bc7e760939c92ea7b
5
5
  SHA512:
6
- metadata.gz: 98a96b1c0cb5b1fdb9f8668aad19641d22abe0201d59c90a80f05e1601de8ac245ed52d0c436ec8b7ddd4c139cb07dab815507f8442603c467d5ead739a50d3d
7
- data.tar.gz: 2d3029f02d2e58f5ea513be0f9a06740fc4fcfb118e4c5f905890fc14f87f9d22797ae217ef67a6d1f4d6e372319347fbbf352782e66decf5a9fa812a2a891c3
6
+ metadata.gz: 0e9b7ff32666ee568658ac47ddfd75d4e252e8a79368626671d867f84fb0feca2915ddf0a7ca5cd6572f8d636f99a6575fa9e9588ae69f637090d556bf7f447e
7
+ data.tar.gz: a125616381900fc577e7d612a492790cc6a57a4b85e24efd442a9729d37bfec1d4557b2757e85b8a990ba1cb86c82ec686fa8f72e5357654b047c5eb20e21407
data/.travis.yml ADDED
@@ -0,0 +1,5 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.3
4
+ - jruby-19mode
5
+ - 2.0.0
data/CHANGELOG.md ADDED
@@ -0,0 +1,12 @@
1
+ v 0.2.0
2
+
3
+ * Not backward compatible - breaks the elements api in page to have better assertions on the elements level
4
+
5
+ v 0.1.1
6
+
7
+ * Added tests
8
+
9
+
10
+ v 0.1.0
11
+
12
+ Initial version extracted
data/README.md CHANGED
@@ -2,6 +2,8 @@
2
2
 
3
3
  Page Object Model for Capybara
4
4
 
5
+ [![Build Status](https://travis-ci.org/TWChennai/capypage.png?branch=master)](https://travis-ci.org/TWChennai/capypage)
6
+
5
7
  ## Installation
6
8
 
7
9
  Add this line to your application's Gemfile:
data/TODO.md ADDED
@@ -0,0 +1 @@
1
+ * Get rid of prefix in favour of base_element
@@ -20,9 +20,9 @@ module DuckDuckGo
20
20
  end
21
21
 
22
22
  class ResultsPage < Capypage::Page
23
- elements :results, '#links .results_links_deep' do |result|
23
+ elements :results, '#links', '.results_links_deep' do |result|
24
24
  result.element :link, '.links_main a'
25
25
  result.element :snippet, '.snippet'
26
26
  end
27
27
  end
28
- end
28
+ end
@@ -6,11 +6,11 @@ module Capypage
6
6
  attr_accessor :selector, :prefix, :finder_options, :base_element
7
7
 
8
8
  def initialize(selector, prefix = nil, options = {}, &block)
9
- options.reverse_merge! :match => :smart
9
+ options.reverse_merge! :match => :first
10
+ @finder_options = options.clone
10
11
  @selector = selector
11
12
  @prefix = prefix
12
- @finder_options = options
13
- @base_element = options.delete(:base_element) || Capybara.current_session
13
+ @base_element = finder_options[:base_element] || capybara_page
14
14
  block.call(self) if block.present?
15
15
  end
16
16
 
@@ -24,9 +24,11 @@ module Capypage
24
24
  define_singleton_method(name) { Elements.new(selector, prefix, options.reverse_merge!(:base_element => base), &block) }
25
25
  end
26
26
 
27
+ def present?
28
+ base_element.has_selector? element_selector, capybara_finder_options
29
+ end
30
+
27
31
  def visible?(options = {})
28
- options.reverse_merge! finder_options
29
- options.reverse_merge! :wait => 2
30
32
  return capybara_element(options).visible?
31
33
  rescue Capybara::ElementNotFound
32
34
  false
@@ -34,15 +36,25 @@ module Capypage
34
36
 
35
37
  protected
36
38
  def capybara_element(options = {})
37
- base_element.find(element_selector, options.reverse_merge(finder_options))
39
+ base_element.find(element_selector, capybara_finder_options(options))
38
40
  end
39
41
 
40
42
  def element_selector
41
43
  [prefix, selector].compact.join(" ")
42
44
  end
43
45
 
46
+ def capybara_page
47
+ Capybara.current_session
48
+ end
49
+
50
+ def capybara_finder_options(options = {})
51
+ finder_options_without_base = finder_options.clone
52
+ finder_options_without_base.delete(:base_element)
53
+ options.reverse_merge finder_options_without_base
54
+ end
55
+
44
56
  def self.capybara_element_methods
45
- Capybara::Node::Element.instance_methods - Object.methods
57
+ Capybara::Node::Element.instance_methods - Object.methods - [:visible?]
46
58
  end
47
59
 
48
60
  delegate *capybara_element_methods,
@@ -6,34 +6,25 @@ module Capypage
6
6
  delegate :each, :size, :[],
7
7
  :to => :all
8
8
 
9
- def initialize(selector, prefix = nil, options = {}, &block)
10
- super(selector, prefix, options)
11
- @child_dsl_block = block
12
- end
13
-
14
- def all(options = {})
15
- base_element.has_selector? element_selector
16
- base_element.all(element_selector, options.reverse_merge(finder_options))
17
- end
9
+ def initialize(parent_selector, children_selector, prefix = nil, options = {}, &block)
10
+ parent_selector_options = options.merge :base_element => Element.new(parent_selector, prefix, options)
18
11
 
19
- def find(text, options = {})
20
- capybara_element options.merge(:text => text)
12
+ super(children_selector, prefix, parent_selector_options)
13
+ @child_dsl_block = block
21
14
  end
22
15
 
23
16
  def find_by_text(text, options = {})
24
17
  Element.new(selector, prefix, finder_options.merge(options).merge(:text => text), &child_dsl_block)
25
18
  end
26
19
 
27
- def find_first(index = 1)
28
- Elements.new("#{element_selector}:nth-child(-n+#{index})", prefix, finder_options)
20
+ def find_by_index(index)
21
+ Element.new("#{element_selector}:nth-child(#{index + 1})", prefix, finder_options, &child_dsl_block)
29
22
  end
30
23
 
31
- def find_last(index = 1)
32
- Elements.new("#{element_selector}:nth-last-child(-n+#{index})", prefix, finder_options)
24
+ private
25
+ def all(options = {})
26
+ base_element.all(element_selector, capybara_finder_options(options))
33
27
  end
34
28
 
35
- def find_by_index(index)
36
- Element.new("#{element_selector}:nth-child(#{index + 1})", prefix, finder_options, &child_dsl_block)
37
- end
38
29
  end
39
- end
30
+ end
data/lib/capypage/page.rb CHANGED
@@ -22,8 +22,8 @@ module Capypage
22
22
  define_method(name) { Element.new(selector, prefix, options) }
23
23
  end
24
24
 
25
- def elements(name, selector, options = {}, &block)
26
- define_method(name) { Elements.new(selector, prefix, options, &block) }
25
+ def elements(name, parent_selector, children_selector, options = {}, &block)
26
+ define_method(name) { Elements.new(parent_selector, children_selector, prefix, options, &block) }
27
27
  end
28
28
 
29
29
  def section(name, section, selector, options = {})
@@ -37,4 +37,4 @@ module Capypage
37
37
  visit self.class.url
38
38
  end
39
39
  end
40
- end
40
+ end
@@ -1,3 +1,3 @@
1
1
  module Capypage
2
- VERSION = '0.1.1'
2
+ VERSION = '0.2.0'
3
3
  end
data/spec/element_spec.rb CHANGED
@@ -11,4 +11,17 @@ describe Capypage::Element do
11
11
  expect(page.header).to_not have_text('Foo')
12
12
  end
13
13
 
14
- end
14
+ describe '#present?' do
15
+ it 'should be true for elements which are present' do
16
+ expect(page.header).to be_present
17
+ expect(page.missing_element).to_not be_present
18
+ end
19
+ end
20
+
21
+ describe '#visible?' do
22
+ it 'should be true for elements which are visible' do
23
+ expect(page.header).to be_visible
24
+ expect(page.invisble_element).to_not be_visible
25
+ end
26
+ end
27
+ end
@@ -14,12 +14,25 @@ describe Capypage::Elements do
14
14
  element = elements.find_by_text('Title 1')
15
15
  expect(element.details.text).to eq('Details 1')
16
16
  end
17
+
18
+ it 'should return false when the child does not exists' do
19
+ element = elements.find_by_text 'Hello'
20
+ expect(element).to_not be_visible
21
+
22
+ expect(elements.find_by_text('Title 1')).to be_visible
23
+ end
24
+
25
+ it 'should look up the element in parent selector' do
26
+ element = elements.find_by_text 'Hello'
27
+ expect(element.base_element).to_not eq(Capybara.current_session)
28
+ expect(element.base_element.selector).to eq('ul.list')
29
+ end
17
30
  end
18
31
 
19
32
  describe 'delegation of capybara methods to the collection' do
20
- xit 'should delegate has_text' do
33
+ it 'should delegate has_text' do
21
34
  expect(elements).to have_text('Title 1')
22
35
  end
23
36
  end
24
37
 
25
- end
38
+ end
@@ -19,7 +19,7 @@
19
19
  <div class="details">Details 2</div>
20
20
  </li>
21
21
  <li>
22
- <div class="title">Title 3</div>
22
+ <div class="title invisible" style="display: none">Title 3</div>
23
23
  <div class="details">Details 3</div>
24
24
  </li>
25
25
  </ul>
data/spec/spec_helper.rb CHANGED
@@ -9,9 +9,11 @@ class SamplePage < Capypage::Page
9
9
  set_url '/'
10
10
 
11
11
  element :header, 'header'
12
- elements :list, 'ul.list li' do |row|
12
+ element :missing_element, '.missing.element'
13
+ element :invisble_element, '.invisible'
14
+
15
+ elements :list, 'ul.list', 'li' do |row|
13
16
  row.element :title, '.title'
14
17
  row.element :details, '.details'
15
18
  end
16
-
17
- end
19
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: capypage
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Selvakumar Natesan
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2013-09-19 00:00:00.000000000 Z
13
+ date: 2013-09-21 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: capybara
@@ -91,10 +91,13 @@ extra_rdoc_files: []
91
91
  files:
92
92
  - .gitignore
93
93
  - .rspec
94
+ - .travis.yml
95
+ - CHANGELOG.md
94
96
  - Gemfile
95
97
  - LICENSE.txt
96
98
  - README.md
97
99
  - Rakefile
100
+ - TODO.md
98
101
  - capypage.gemspec
99
102
  - examples/simple/Gemfile
100
103
  - examples/simple/README.md
@@ -131,7 +134,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
131
134
  version: '0'
132
135
  requirements: []
133
136
  rubyforge_project:
134
- rubygems_version: 2.0.3
137
+ rubygems_version: 2.0.6
135
138
  signing_key:
136
139
  specification_version: 4
137
140
  summary: Page Object Model for Capybara