capypage 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
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