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 +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
|