capybara-harness 0.0.13 → 0.0.14
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.
- data/.gitignore +1 -0
- data/capybara-harness.gemspec +2 -0
- data/lib/capybara/harness/dom/attribute.rb +0 -1
- data/lib/capybara/harness/dom/field.rb +29 -11
- data/lib/capybara/harness/dom/reader.rb +3 -3
- data/lib/capybara/harness/dom/writer.rb +1 -1
- data/lib/capybara/harness/version.rb +1 -1
- data/spec/dom/field_spec.rb +92 -0
- data/spec/spec_helper.rb +7 -1
- metadata +36 -2
data/.gitignore
CHANGED
data/capybara-harness.gemspec
CHANGED
@@ -18,6 +18,8 @@ Gem::Specification.new do |gem|
|
|
18
18
|
gem.require_paths = ["lib"]
|
19
19
|
|
20
20
|
gem.add_development_dependency('rspec')
|
21
|
+
gem.add_development_dependency('launchy')
|
21
22
|
gem.add_runtime_dependency('capybara', '>= 1.1')
|
23
|
+
gem.add_development_dependency("sinatra", [">= 0.9.4"])
|
22
24
|
gem.add_runtime_dependency(%q<activesupport>, [">= 3.0"])
|
23
25
|
end
|
@@ -2,22 +2,34 @@ module Capybara::Harness::Dom
|
|
2
2
|
class Field
|
3
3
|
include Capybara::DSL
|
4
4
|
|
5
|
-
attr_accessor :name, :label, :
|
5
|
+
attr_accessor :name, :label, :as, :through
|
6
6
|
|
7
|
-
def initialize(options = {})
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
7
|
+
def initialize(name, options = {})
|
8
|
+
@name = name.to_sym
|
9
|
+
@through = extract_option_as_sym(:through, options)
|
10
|
+
@label = options.fetch(:label, name.to_s.titleize)
|
11
|
+
@as = options.fetch(:as, :string).to_sym
|
12
12
|
end
|
13
13
|
|
14
14
|
def fill(attrs = {})
|
15
15
|
value = extract_value(attrs)
|
16
|
-
case
|
16
|
+
case as
|
17
17
|
when :string then
|
18
18
|
fill_in(label, :with => value)
|
19
19
|
when :select then
|
20
20
|
select(value, :from => label)
|
21
|
+
when :file
|
22
|
+
attach_file(label, value)
|
23
|
+
when :radio
|
24
|
+
choose(label)
|
25
|
+
when :checkbox, :checkboxes
|
26
|
+
if value.is_a?(Hash)
|
27
|
+
value.each { |label, v| checkbox(v, label) }
|
28
|
+
elsif value.is_a?(Array)
|
29
|
+
value.each { |v| checkbox(v) }
|
30
|
+
else
|
31
|
+
check(value, label)
|
32
|
+
end
|
21
33
|
end
|
22
34
|
end
|
23
35
|
|
@@ -25,10 +37,6 @@ module Capybara::Harness::Dom
|
|
25
37
|
@through.to_sym if @through
|
26
38
|
end
|
27
39
|
|
28
|
-
def name
|
29
|
-
@name.to_sym
|
30
|
-
end
|
31
|
-
|
32
40
|
private
|
33
41
|
|
34
42
|
def has_attribute?(attrs)
|
@@ -41,5 +49,15 @@ module Capybara::Harness::Dom
|
|
41
49
|
attrs[name.to_sym]
|
42
50
|
end
|
43
51
|
|
52
|
+
def extract_option_as_sym(option_name, options)
|
53
|
+
option = options.delete(option_name)
|
54
|
+
option.nil? ? nil : option.to_sym
|
55
|
+
end
|
56
|
+
|
57
|
+
def check(value, label = nil)
|
58
|
+
label = value if label.nil?
|
59
|
+
[false, nil, 0].include?(value) ? uncheck(label) : super(label)
|
60
|
+
end
|
61
|
+
|
44
62
|
end
|
45
63
|
end
|
@@ -16,7 +16,7 @@ module Capybara::Harness::Dom
|
|
16
16
|
|
17
17
|
# Public: Scans the DOM and finds the node that represents the subject.
|
18
18
|
def find_element(values = {})
|
19
|
-
page.find(".#{name} .#{finder_attr_name}", :text => finder_attr.derive_value(values)).find(:xpath, ".//ancestor::*[@class='#{name}']")
|
19
|
+
page.find(".#{name} .#{finder_attr_name}", :visible => true, :text => finder_attr.derive_value(values)).find(:xpath, ".//ancestor::*[@class='#{name}']")
|
20
20
|
end
|
21
21
|
|
22
22
|
# Public: Scans the DOM and finds the node that represents the subject's list element.
|
@@ -49,12 +49,12 @@ module Capybara::Harness::Dom
|
|
49
49
|
end
|
50
50
|
|
51
51
|
def has_attrs?(values = {})
|
52
|
-
return false unless page.has_css?(".#{name} .#{finder_attr_name}", :text => finder_attr.derive_value(values))
|
52
|
+
return false unless page.has_css?(".#{name} .#{finder_attr_name}", :visible => true, :text => finder_attr.derive_value(values))
|
53
53
|
|
54
54
|
node = find_element(values)
|
55
55
|
attributes.each do |attr_name, attr|
|
56
56
|
text = attr.derive_value(values)
|
57
|
-
return false unless node.has_css?(".#{attr_name}", :text => text)
|
57
|
+
return false unless node.has_css?(".#{attr_name}", :visible => true, :text => text)
|
58
58
|
end
|
59
59
|
|
60
60
|
true
|
@@ -10,7 +10,7 @@ module Capybara::Harness::Dom
|
|
10
10
|
options = args.last.is_a?(Hash) ? args.pop : {}
|
11
11
|
|
12
12
|
args.each do |field_name|
|
13
|
-
fields << Capybara::Harness::Dom::Field.new(options
|
13
|
+
fields << Capybara::Harness::Dom::Field.new(field_name, options)
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
@@ -0,0 +1,92 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Capybara::Harness::Dom::Field do
|
4
|
+
|
5
|
+
include Capybara::DSL
|
6
|
+
include Capybara::RSpecMatchers
|
7
|
+
|
8
|
+
before do
|
9
|
+
visit('/form')
|
10
|
+
end
|
11
|
+
|
12
|
+
describe "#fill" do
|
13
|
+
context "when only name is specified" do
|
14
|
+
it "fills in the field" do
|
15
|
+
field = Capybara::Harness::Dom::Field.new(:zipcode)
|
16
|
+
field.fill({ zipcode: '12345'})
|
17
|
+
page.find_field('Zipcode').value.should == '12345'
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
context "when the :label option is specified" do
|
22
|
+
it "fills in the field" do
|
23
|
+
field = Capybara::Harness::Dom::Field.new(:explanation, label: 'Explanation of Name')
|
24
|
+
field.fill({ explanation: 'None'})
|
25
|
+
page.find_field('Explanation of Name').value.should == 'None'
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
context "when the :as option is specified" do
|
30
|
+
describe ":select" do
|
31
|
+
it "selects the field" do
|
32
|
+
field = Capybara::Harness::Dom::Field.new(:other_title, as: :select, label: 'Other title')
|
33
|
+
field.fill({ other_title: 'Miss'})
|
34
|
+
page.should have_select('Other title', :selected => 'Miss')
|
35
|
+
end
|
36
|
+
|
37
|
+
it "selects multiple values"
|
38
|
+
end
|
39
|
+
|
40
|
+
describe ":checkbox" do
|
41
|
+
context "when the supplied value is boolean" do
|
42
|
+
let(:field) { Capybara::Harness::Dom::Field.new(:terms, as: :checkbox, label: 'Terms of Use') }
|
43
|
+
|
44
|
+
it "checks the box when true" do
|
45
|
+
page.uncheck('Terms of Use')
|
46
|
+
field.fill({ terms: true })
|
47
|
+
page.find_field('Terms of Use').should be_checked
|
48
|
+
end
|
49
|
+
|
50
|
+
it "unchecks the box when false" do
|
51
|
+
page.check('Terms of Use')
|
52
|
+
field.fill({ terms: false })
|
53
|
+
page.find_field('Terms of Use').should_not be_checked
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
context "when the supplied value is an integer" do
|
58
|
+
|
59
|
+
end
|
60
|
+
|
61
|
+
|
62
|
+
context "when the supplied value is an array" do
|
63
|
+
|
64
|
+
end
|
65
|
+
|
66
|
+
context "when the supplied value is a hash" do
|
67
|
+
|
68
|
+
end
|
69
|
+
|
70
|
+
|
71
|
+
it "checks multiple values" do
|
72
|
+
field = Capybara::Harness::Dom::Field.new(:pets, as: :checkboxes)
|
73
|
+
field.fill({ pets: { }})
|
74
|
+
page.find_field('Terms of Use').should_not be_checked
|
75
|
+
end
|
76
|
+
|
77
|
+
it "unchecks multiple values"
|
78
|
+
end
|
79
|
+
|
80
|
+
describe ":radio" do
|
81
|
+
it "selects the radio option"
|
82
|
+
end
|
83
|
+
|
84
|
+
describe ":file" do
|
85
|
+
it "fills in the field"
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
end
|
90
|
+
|
91
|
+
|
92
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,7 +1,13 @@
|
|
1
|
+
require "capybara"
|
2
|
+
require "capybara/rspec" # Required here instead of in rspec_spec to avoid RSpec deprecation warning
|
3
|
+
require "capybara/spec/test_app"
|
4
|
+
require "capybara/spec/spec_helper"
|
1
5
|
require 'capybara-harness'
|
2
6
|
|
3
7
|
RSpec.configure do |config|
|
4
8
|
config.treat_symbols_as_metadata_keys_with_true_values = true
|
5
9
|
config.run_all_when_everything_filtered = true
|
6
10
|
config.filter_run :focus
|
7
|
-
|
11
|
+
config.before { Capybara::SpecHelper.reset! }
|
12
|
+
config.after { Capybara::SpecHelper.reset! }
|
13
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: capybara-harness
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.14
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-02-05 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
@@ -27,6 +27,22 @@ dependencies:
|
|
27
27
|
- - ! '>='
|
28
28
|
- !ruby/object:Gem::Version
|
29
29
|
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: launchy
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :development
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
30
46
|
- !ruby/object:Gem::Dependency
|
31
47
|
name: capybara
|
32
48
|
requirement: !ruby/object:Gem::Requirement
|
@@ -43,6 +59,22 @@ dependencies:
|
|
43
59
|
- - ! '>='
|
44
60
|
- !ruby/object:Gem::Version
|
45
61
|
version: '1.1'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: sinatra
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: 0.9.4
|
70
|
+
type: :development
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: 0.9.4
|
46
78
|
- !ruby/object:Gem::Dependency
|
47
79
|
name: activesupport
|
48
80
|
requirement: !ruby/object:Gem::Requirement
|
@@ -84,6 +116,7 @@ files:
|
|
84
116
|
- lib/capybara/harness/dom_harness.rb
|
85
117
|
- lib/capybara/harness/version.rb
|
86
118
|
- spec/dom/attribute_spec.rb
|
119
|
+
- spec/dom/field_spec.rb
|
87
120
|
- spec/dom/reader_spec.rb
|
88
121
|
- spec/spec_helper.rb
|
89
122
|
homepage: https://github.com/twmills/capybara-harness
|
@@ -113,5 +146,6 @@ summary: A test harness strategy to easily query and manipulate DOM elements as
|
|
113
146
|
objects in the context of feature or acceptance tests.
|
114
147
|
test_files:
|
115
148
|
- spec/dom/attribute_spec.rb
|
149
|
+
- spec/dom/field_spec.rb
|
116
150
|
- spec/dom/reader_spec.rb
|
117
151
|
- spec/spec_helper.rb
|