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 +4 -4
- data/.travis.yml +5 -0
- data/CHANGELOG.md +12 -0
- data/README.md +2 -0
- data/TODO.md +1 -0
- data/examples/simple/spec/spec_helper.rb +2 -2
- data/lib/capypage/element.rb +19 -7
- data/lib/capypage/elements.rb +10 -19
- data/lib/capypage/page.rb +3 -3
- data/lib/capypage/version.rb +1 -1
- data/spec/element_spec.rb +14 -1
- data/spec/elements_spec.rb +15 -2
- data/spec/sample_page.html +1 -1
- data/spec/spec_helper.rb +5 -3
- metadata +6 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 30a731012359de239cdb2f372f74ec752a45f69d
|
4
|
+
data.tar.gz: f76f9ceb5a7944cc056ba70bc7e760939c92ea7b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0e9b7ff32666ee568658ac47ddfd75d4e252e8a79368626671d867f84fb0feca2915ddf0a7ca5cd6572f8d636f99a6575fa9e9588ae69f637090d556bf7f447e
|
7
|
+
data.tar.gz: a125616381900fc577e7d612a492790cc6a57a4b85e24efd442a9729d37bfec1d4557b2757e85b8a990ba1cb86c82ec686fa8f72e5357654b047c5eb20e21407
|
data/.travis.yml
ADDED
data/CHANGELOG.md
ADDED
data/README.md
CHANGED
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
|
data/lib/capypage/element.rb
CHANGED
@@ -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 => :
|
9
|
+
options.reverse_merge! :match => :first
|
10
|
+
@finder_options = options.clone
|
10
11
|
@selector = selector
|
11
12
|
@prefix = prefix
|
12
|
-
@
|
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
|
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,
|
data/lib/capypage/elements.rb
CHANGED
@@ -6,34 +6,25 @@ module Capypage
|
|
6
6
|
delegate :each, :size, :[],
|
7
7
|
:to => :all
|
8
8
|
|
9
|
-
def initialize(
|
10
|
-
|
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
|
-
|
20
|
-
|
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
|
28
|
-
|
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
|
-
|
32
|
-
|
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,
|
26
|
-
define_method(name) { Elements.new(
|
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
|
data/lib/capypage/version.rb
CHANGED
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
|
-
|
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
|
data/spec/elements_spec.rb
CHANGED
@@ -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
|
-
|
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
|
data/spec/sample_page.html
CHANGED
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
|
-
|
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.
|
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-
|
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.
|
137
|
+
rubygems_version: 2.0.6
|
135
138
|
signing_key:
|
136
139
|
specification_version: 4
|
137
140
|
summary: Page Object Model for Capybara
|